使用Python对阿拉伯文本进行快速音译

问题描述 投票:5回答:5

[我一直在处理阿拉伯文本文件,为避免编码问题,我根据Buckwalter的方案(http://www.qamus.org/transliteration.htm)将阿拉伯字符译成英语。

这是我的代码,但是即使对于400 kb之类的小文件,它也非常慢。有什么想法可以使其更快?

感谢

     def transliterate(file):
          data = open(file).read()
          buckArab = {"'":"ء", "|":"آ", "?":"أ", "&":"ؤ", "<":"إ", "}":"ئ", "A":"ا", "b":"ب", "p":"ة", "t":"ت", "v":"ث", "g":"ج", "H":"ح", "x":"خ", "d":"د", "*":"ذ", "r":"ر", "z":"ز", "s":"س", "$":"ش", "S":"ص", "D":"ض", "T":"ط", "Z":"ظ", "E":"ع", "G":"غ", "_":"ـ", "f":"ف", "q":"ق", "k":"ك", "l":"ل", "m":"م", "n":"ن", "h":"ه", "w":"و", "Y":"ى", "y":"ي", "F":"ً", "N":"ٌ", "K":"ٍ", "~":"ّ", "o":"ْ", "u":"ُ", "a":"َ", "i":"ِ"}    
          for char in data: 
               for k, v in arabBuck.iteritems():
                     data = data.replace(k,v)                 
      return data
python arabic
5个回答
5
投票

偶然地,有人已经编写了一个脚本来执行此操作,因此您可能需要先检查一下,然后再花费太多时间:buckwalter2unicode.py

它的作用可能超出您的需要,但您不必全部使用:我只复制了两个字典和transliterateString函数(我想做了一些调整),然后在我的网站上使用了它。

编辑:上面的脚本是我一直在使用的脚本,但是我发现它比使用replace慢很多,尤其是对于大型语料库。这是我最终得到的代码,它看起来更简单,更快(这引用了字典buck2uni):def transString(string, reverse=0): '''Given a Unicode string, transliterate into Buckwalter. To go from Buckwalter back to Unicode, set reverse=1''' for k, v in buck2uni.items(): if not reverse: string = string.replace(v, k) else: string = string.replace(k, v) return string


4
投票
无论何时需要音译str.translate都是使用的方法:

4
投票
[每当我在Unicode对象上使用str.translate时,它都会返回相同的对象。也许这是由于the change in behavior alluded to by Martijn Peters

3
投票
您正在为每个角色重做相同的作品。当您执行data = data.replace(k, v)时,它将替换整个文件中出现的给定字符的[[all

1
投票
© www.soinside.com 2019 - 2024. All rights reserved.