Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-字母频率计数和翻译_Python_Character Encoding_Translation_Nlp - Fatal编程技术网

Python-字母频率计数和翻译

Python-字母频率计数和翻译,python,character-encoding,translation,nlp,Python,Character Encoding,Translation,Nlp,我使用的是Python 3.1,但如果需要,我可以降级 我有一个ASCII文件,里面有一篇短篇小说,是用一种语言写的,它的字母表可以用大写和小写ASCII表示。我希望: 1) 尽我最大的能力检测编码,获得某种置信度(根据文件的长度会有所不同,对吗?) 2) 使用一些免费的在线服务或图书馆自动翻译整个内容 附加问题:如果文本是用一种语言编写的,它需要2个或更多字节来表示一个字母,而字节顺序标记不在那里帮助我怎么办 最后,我如何处理标点符号和其他字符,如空格?它会比一些字母更频繁地出现,对吗?标点符

我使用的是Python 3.1,但如果需要,我可以降级

我有一个ASCII文件,里面有一篇短篇小说,是用一种语言写的,它的字母表可以用大写和小写ASCII表示。我希望:

1) 尽我最大的能力检测编码,获得某种置信度(根据文件的长度会有所不同,对吗?)

2) 使用一些免费的在线服务或图书馆自动翻译整个内容

附加问题:如果文本是用一种语言编写的,它需要2个或更多字节来表示一个字母,而字节顺序标记不在那里帮助我怎么办

最后,我如何处理标点符号和其他字符,如空格?它会比一些字母更频繁地出现,对吗?标点符号和字符有时是混合的,可能有两种逗号表示法,两种看起来像“a”的表示法,等等

是的,我读过。请至少帮我拿一下这些东西

谢谢大家!


这不是一个家庭作业,但它是为了自我教育的目的。我更喜欢使用开源、可读的字母频率库,而不是封闭、高效、但工作做得很好的字母频率库。

如果您有ASCII文件,我可以100%放心地告诉您,它是用ASCII编码的。除了那次尝试。但是知道编码并不一定足以确定它使用的是哪种语言

至于多字节编码,处理它的唯一可靠方法是希望它有拉丁字母表中的字符,并查找该对中哪一半的字符为空。否则将其视为UTF-8,除非您更清楚(Shift JIS、GB2312等)


哦,还有UTF-8。UTF-8,UTF-8,UTF-8。我想我再强调也不够了。如果我没有。。。UTF-8。

基本上,实现所述应用程序有三个主要任务:

  • 1a)识别输入文本的字符编码
  • 1b)识别输入文本的语言
  • 2) 通过在线服务的API之一将文本翻译成文本
对于1a,除了脚本本身之外,您可能还想了解一下,它提供了许多关于字符集和编码的非常有用的资源<其他答案中提到的strong>CharDet,似乎也值得考虑

如您所建议的,一旦字符编码已知,您可以通过计算文本的字符频率剖面并将其与已知频率匹配来解决1b)。虽然简单,但这种方法通常能提供相当高的准确率,尽管它在较短的文本和遵循特定模式的文本上可能较弱;例如,在法语文本中,许多参考公制单位的字母M、K和C的比例非常高

一种互补且非常相似的方法是,使用双格(两个字母的序列)和三格(三个字母)以及各种语言中相应的频率分布参考表

其他语言检测方法涉及对文本进行标记,即考虑文本中的单词。NLP资源包括各种语言中使用最多的单词的表。这些词通常是冠词、所有格形容词、副词等

语言检测的另一种解决方案是依靠在线翻译服务为我们解决这个问题。重要的是向翻译服务提供其理解的字符编码文本,前提是该语言可能是多余的


最后,对于许多实际的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