Python-字母频率计数和翻译
我使用的是Python 3.1,但如果需要,我可以降级 我有一个ASCII文件,里面有一篇短篇小说,是用一种语言写的,它的字母表可以用大写和小写ASCII表示。我希望: 1) 尽我最大的能力检测编码,获得某种置信度(根据文件的长度会有所不同,对吗?) 2) 使用一些免费的在线服务或图书馆自动翻译整个内容 附加问题:如果文本是用一种语言编写的,它需要2个或更多字节来表示一个字母,而字节顺序标记不在那里帮助我怎么办 最后,我如何处理标点符号和其他字符,如空格?它会比一些字母更频繁地出现,对吗?标点符号和字符有时是混合的,可能有两种逗号表示法,两种看起来像“a”的表示法,等等 是的,我读过。请至少帮我拿一下这些东西 谢谢大家!Python-字母频率计数和翻译,python,character-encoding,translation,nlp,Python,Character Encoding,Translation,Nlp,我使用的是Python 3.1,但如果需要,我可以降级 我有一个ASCII文件,里面有一篇短篇小说,是用一种语言写的,它的字母表可以用大写和小写ASCII表示。我希望: 1) 尽我最大的能力检测编码,获得某种置信度(根据文件的长度会有所不同,对吗?) 2) 使用一些免费的在线服务或图书馆自动翻译整个内容 附加问题:如果文本是用一种语言编写的,它需要2个或更多字节来表示一个字母,而字节顺序标记不在那里帮助我怎么办 最后,我如何处理标点符号和其他字符,如空格?它会比一些字母更频繁地出现,对吗?标点符
这不是一个家庭作业,但它是为了自我教育的目的。我更喜欢使用开源、可读的字母频率库,而不是封闭、高效、但工作做得很好的字母频率库。如果您有ASCII文件,我可以100%放心地告诉您,它是用ASCII编码的。除了那次尝试。但是知道编码并不一定足以确定它使用的是哪种语言 至于多字节编码,处理它的唯一可靠方法是希望它有拉丁字母表中的字符,并查找该对中哪一半的字符为空。否则将其视为UTF-8,除非您更清楚(Shift JIS、GB2312等)
哦,还有UTF-8。UTF-8,UTF-8,UTF-8。我想我再强调也不够了。如果我没有。。。UTF-8。基本上,实现所述应用程序有三个主要任务:
- 1a)识别输入文本的字符编码
- 1b)识别输入文本的语言
- 2) 通过在线服务的API之一将文本翻译成文本
最后,对于许多实际的NLP应用程序,您可能会决定实现多个解决方案。通过使用策略设计模式,可以按特定顺序应用多个过滤器/分类器/步骤,并根据情况在不同点退出此逻辑。例如,如果一个简单的字符/双字符频率匹配文本到英语(有一个小的偏差),你可能就到此为止。否则,如果猜测的语言是法语或德语,请执行另一个测试等。字符频率非常直接 我刚刚注意到您正在使用Python3.1,所以这更容易
>>> from collections import Counter
>>> Counter("Μεταλλικα")
Counter({'α': 2, 'λ': 2, 'τ': 1, 'ε': 1, 'ι': 1, 'κ': 1, 'Μ': 1})
对于较早版本的Python:
>>> from collections import defaultdict
>>> letter_freq=defaultdict(int)
>>> unistring = "Μεταλλικα"
>>> for uc in unistring: letter_freq[uc]+=1
...
>>> letter_freq
defaultdict(<class 'int'>, {'τ': 1, 'α': 2, 'ε': 1, 'ι': 1, 'λ': 2, 'κ': 1, 'Μ': 1})
>>从集合导入defaultdict
>>>字母频率=defaultdict(int)
>>>unistring=“εεταλλκα”
>>>对于统一字符串中的uc:字母_频率[uc]+=1
...
>>>字母频率
defaultdict(,{'τ':1,'α':2,'ε':1,'ι':1,'λ':2,'κ':1,'Μ':1})
我已经提供了一些有条件的答案,但是你的问题有点含糊和不一致。请编辑您的问题,为我下面的问题提供答案
(1) 你说文件是ASCII码,但你想检测编码?嗯?答案不是“ascii”吗??如果确实需要检测编码,请使用
(2) 自动翻译什么?编码?语言?如果是语言,您是否知道输入语言是什么,或者您是否也在尝试检测它?要检测语言,请尝试。。。注意,为了更好地检测日语,需要对其进行调整。请参阅which注释了日语问题,并强调了对于任何语言猜测者来说,您需要从文本中删除所有HTML/XML/Javascript/etc噪声,否则结果将严重偏向于仅ASCII语言,如英语(或加泰罗尼亚语!)
(3) 你说的是“字母频率库”。。。你打算用这个库做什么?如果是语言猜测,那么使用单个字母的频率似乎对区分使用相同(或几乎相同)字符集的语言没有多大帮助;我们需要使用三个字母组(“三叉图”)的频率
(4) 你关于标点和空格的问题:取决于你的目的(我们还不确定)。如果目的是语言检测,那么想法是标准化t