中文简繁体互转时的语义识别AI

中文简繁体互转时的语义识别AI中文简繁体互转时 使用直译很简单 Delphi 中使用 LCMapStringW 这个 API

大家好,欢迎来到IT知识分享网。

中文简繁体互转时,使用直译很简单,Delphi中使用LCMapStringW这个API。

但是如果要追求完美,考虑两岸用词习惯,就需要考虑“语义”,有两种情况:

(1)字还是基本是那个字,只是写法不同。如:

  • 周期 – 週期
  • 周杰伦 – 周傑倫

(2)字都变了。如:

  • 文件 – 檔案
  • 程序 – 程式

周和週:◎ “周”作姓、朝代时,繁体也为“周”,与简体同形。◎ 圈子、周围、周到、星期的“周”繁体为“週”。◎ 周chou(賙),接济。

语义就要涉及上下文分析,有点AI在里面,就不那么容易了。

微软Word和金山WPS的“中文简繁体”转换都不是简单的直译,有加AI。

百度的在线翻译也有加AI。(不过“下周期末考试”和“这周期末考试”翻译结果不同,可能训练素材不全)

中文简繁体互转时的语义识别AI

调用百度翻译API,需要先去这里申请开通:http://api.fanyi.baidu.com/

Delphi中调用百度翻译API,如下:

function TranslateWordByHttp(AFromLanguage,AToLanguage:PacroCultureInfo;AText:WideString):WideString; var vParam:TStringList; vMS:TMemoryStream; S:Ansistring; WS:WideString; vHTTP:TIdHTTP; MD5: TIdHashMessageDigest5; vResult:TJSONObject; vR:TJSONArray; begin Result:=''; vParam:=TStringList.Create; vMS:=TMemoryStream.Create; vHTTP:=TIdHttp.Create(nil); try vParam.Values['appid']:=C_appid; vParam.Values['from']:=AFromLanguage^.BaiDu_Abbreviate; vParam.Values['to']:=AToLanguage^.BaiDu_Abbreviate; vParam.Values['q']:=AText; vParam.Values['salt']:=InttoStr(Random(32768)); //vParam.Values['dict']:='1'; //拼接appid+q+salt+密钥: //S:=vParam.Values['appid']+S+vParam.Values['salt']+C_secret; S:=C_appid; vMS.Write(S[1],Length(S)); //按要求,必须UTF8,Delphi下S必须定义为AnsiString S:=UTF8Encode(AText); vMS.Write(S[1],Length(S)); S:=vParam.Values['salt']; vMS.Write(S[1],Length(S)); S:=C_secret; vMS.Write(S[1],Length(S)); MD5 := TIdHashMessageDigest5.Create; vMS.Position:=0; //不能用HashStringAsHex,因为它定义的string其实是widestring,utf8隐含会又被转成unicode vParam.Values['sign']:=MD5.HashStreamAsHex(vMS).ToLower(); MD5.Free; vMS.Clear; vHTTP.Request.ContentType:='application/x-www-form-urlencoded'; vHTTP.Post('http://api.fanyi.baidu.com/api/trans/vip/translate',vParam,vMS); Setlength(S,vMS.Size); Move(vMS.Memory^,S[1],vMS.Size); //不需要转码 //WS:=UTF8Decode(S); //得到内容字串: //'{"from":"zh","to":"cht","trans_result":[{"src":"\u8d44\u672c\u4e3b\u4e49","dst":"\u8cc7\u672c\u4e3b\u7fa9"}]}' vResult:=TJSONObject(TJSONObject.ParseJSONValue(S)); try if vResult.Values['error_code']=nil then begin vR:=TJSONArray(vResult.Values['trans_result']); if vR.Count>0 then begin //不需要转码 //WS:=UTF8Decode(S); result:=TJSONString(TJSONObject(vR.Items[0]).Values['dst']).Value; end; end; finally vResult.Free; end; finally vHttp.Free; vMS.Free; vParam.Free; end; end;

我测试了结果是OK的,有加入AI功能。

本来想网上找一个词汇对照库,没有找到合适的。

  • mediawiki:https://www.zhangshengrong.com/p/JKN8xq2N6b/

ZhConversion.php内容大概是这样的:

'𪎈' => '䴬', '𪎉' => '麲', '𪎊' => '麨', '𪎋' => '䴴', '𪎌' => '麳', '𪚏' => '𪘀', '𪚐' => '𪘯', '' => '棡', '0多只' => '0多隻', '0天后' => '0天後', '0只' => '0隻', '0余' => '0餘', '1天后' => '1天後', '1只' => '1隻', '2天后' => '2天後', '2只' => '2隻', '3天后' => '3天後', '3只' => '3隻', '4天后' => '4天後', '4只' => '4隻', '5天后' => '5天後', '5只' => '5隻', '6天后' => '6天後', '6只' => '6隻', '7天后' => '7天後', '7只' => '7隻', '8天后' => '8天後', '8只' => '8隻', '9天后' => '9天後', '9只' => '9隻', '〇只' => '〇隻', '〇余' => '〇餘', '一干二净' => '一乾二淨',

查找了一下“周期”这个词,没有。放弃。

  • https://download.csdn.net/download/u0/

《简体繁体字对照表全3.csv》内容大概是这样的:

[转换方向] [添加或修改] [转换为] [词性] 简繁双向 计算机 電腦 名词 简繁双向 0出现 0出現 名词 简繁双向 0出現 0出現 名词 简繁双向 0出線 0出線 名词 简繁双向 0出线 0出線 名词 简繁双向 0只支持 0只支持 名词 简繁双向 0只支援 0只支援 名词 简繁双向 0周后 0周後 名词 简繁双向 0天后 0天後 名词 简繁双向 0只 0隻 名词 简繁双向 0余 0餘 名词 简繁双向 0出 0齣 名词 简繁双向 1只支持 1只支持 名词 简繁双向 1只支援 1只支援 名词 简繁双向 1周后 1周後 名词 简繁双向 1天后 1天後 名词 简繁双向 1只 1隻 名词 简繁双向 1余 1餘 名词 简繁双向 2只支持 2只支持 名词 简繁双向 2只支援 2只支援 名词 简繁双向 2周后 2周後 名词 

也用“周期”查了一下,没有。“1周后”也没翻译成“1週後”,放弃。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/105536.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信