Python - 字母频率计数和翻译

标签 python character-encoding translation nlp

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

我有一个 ASCII 文件,其中包含一个用其中一种语言编写的短篇小说,其字母表可以用大写和/或小写 ASCII 表示。我希望:

1) 尽我所能检测编码,获得某种置信度指标(会因文件长度而异,对吧?)

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

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

最后,我该如何处理标点符号和诸如空格之类的其他字符?它会比某些字母更频繁地出现,对吧?标点符号和字符有时可以混合使用这一事实怎么样 - 逗号可能有两种表示形式,看起来像“a”的两种表示形式等等?

是的,我已经阅读了the article by Joel Spolsky on Unicode .请至少帮我解决其中的一些问题。

谢谢!

附言这不是家庭作业,而是出于自学目的。我更喜欢使用开源且可读的字母频率库,而不是封闭、高效但可以很好地完成工作的字母频率库。

最佳答案

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

  • 1a) 识别输入文本的字符编码
  • 1b) 识别输入文本的语言
  • 2) 通过在线服务的 API 之一获取文本翻译文本

对于 1a,您可能需要查看 decodeh.py ,除了脚本本身,它还提供了很多关于字符集和编码的非常有用的资源。 CharDet,在其他答案中提到,似乎也值得考虑。

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

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

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

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

最后,由于许多实际的 NLP 应用程序,您可能会决定实现多个解决方案。通过使用策略设计模式,可以按特定顺序应用多个过滤器/分类器/步骤,并根据情况在不同点退出此逻辑。例如,如果一个简单的字符/二元组频率将文本与英语相匹配(偏差很小),那么人们可能就到此为止了。否则,如果猜测的语言是法语或德语,则进行另一次测试等。

关于Python - 字母频率计数和翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2233355/

相关文章:

c# - 来自 odbc 阅读器 C# 的字符编码

mysql - 得到??????使用 JSP 代替来自 MySQL 数据库的印地语文本

python - 在 shell 命令替换中调用 Python 脚本时,将输入提示与返回值分开

python - web.py app.request() 的 Flask/Werkzeug 等效项

c++ - VC有没有像GCC中的 '-fexec-charset'这样的编译选项来设置执行字符集?

unicode - 是否有 Unicode 字符名称的标准化翻译?

java - Google Translator API 和一个词的多个翻译

javascript - 如何让我的正则表达式翻译我给它的字符串而不是它自己的输出?

python - 如何查询Python事件循环单调时钟分辨率

python - PyQt 和 Maya,线程 = False?