是否有任何 C# 库可以检测特定文本的语言?即对于输入文本"This is a sentence"
,它应该将语言检测为"English"
. 或者"Esto es una sentencia"
它应该将语言检测为"Spanish"
.
我知道从文本中检测语言不是确定性问题。但是谷歌翻译和必应翻译都有一个“自动检测”选项,它可以最好地猜测输入语言。是否有类似的公开可用的东西,最好是在 C# 中?
语言检测是一件相当困难的事情。
仅仅由于使用的变音符号和二合字母/三合字母,某些语言比其他语言更容易检测。例如,双尖音几乎只在匈牙利语中使用。无点的i 'ı',仅 [我认为] 用于土耳其语,t-comma(不是 t-cedilla)仅用于罗马尼亚语,而 eszett 'ß' 仅出现在德语中。
一些二合字母、三合字母和四合字母也是很好的赠品。例如,您很可能会发现 'eeuw' 和 'ieuw' 主要是荷兰语,而 'tsch' 和 'dsch' 主要是德语等。
更多赠品将包括特定语言中使用的常用词或常用前缀/后缀。有时甚至使用的标点符号也可以帮助确定语言(引用样式和使用等)。
如果存在这样的库,我想知道它,因为我自己正在研究它。
请在此处找到基于 3grams 分析的 C# 实现:
在这里,您有一个基于二元统计的简单检测器(基本上意味着从一个大集合中学习哪些二元在每种语言上更频繁地出现,然后计算一段文本中的那些,与您之前检测到的值相比):
http://allantech.blogspot.com/2007/07/automatic-language-detection.html
这对于许多(大多数?)应用程序来说可能已经足够好了,并且不需要 Internet 访问。
当然,它的性能会比 Google 或 Bing 的算法差(它们本身并不好)。如果您需要出色的检测性能,您将不得不做大量的艰苦工作和大量的数据。
如果您的应用程序可以访问 Internet ,则另一种选择是利用Google或 Bing API。
你需要一个基于隐藏马尔可夫链的机器学习算法,处理一堆不同语言的文本。
然后当它到达未识别的文本时,具有更接近“分数”的语言是赢家。
有一个识别文本语言的简单工具:http: //www.detectlanguage.com/
我发现“textcat”对此非常有用。我使用了基于这个原始实现的 PHP 实现PHP Text Cat,并且发现它是可靠的。如果您查看源代码,您会发现用您选择的语言实现它并不是一件非常困难的事情。艰苦的工作——与特定语言相关的字母组合——都以数据的形式存在。