检测文字语言
有没有可以检测特定文本语言的C#库? 即对于输入文本"This is a sentence"
,它应该将语言检测为"English"
。 或者对于"Esto es una sentencia"
它应该将语言检测为"Spanish"
。
我理解从文本中检测语言不是一个确定性的问题。 但Google Translate和Bing Translator都有一个“自动检测”选项,可以最好地猜测输入语言。 是否有公开的类似内容,最好是在C#中?
是的,TextCat非常适合语言识别。 它有很多不同语言的实现。
.Net中没有端口。 所以我写了一篇: NTextCat ( NuGet , 在线演示 )。
它是纯.NET Framework DLL +命令行界面。 默认情况下,它使用14种语言的配置文件。
任何反馈都非常感谢! 欢迎新的想法和function要求:)
语言检测是一件非常困难的事情。
有些语言比其他语言更易于检测,仅仅是因为使用了变音符号和有向图/三字符。 例如, 双重急性口音几乎全部用于匈牙利语。 dotless i’ı ‘在土耳其语专用[我认为],t-comma(不是t-cedilla)仅在罗马尼亚语中使用,而eszett’ß’仅在德语中使用。
一些有向图,三字母和四字图也是一个很好的赠品。 例如,你最有可能发现’eeuw’和’ieuw’主要用荷兰语,’tsch’和’dsch’主要用德语等。
更多赠品将包括在特定语言中使用的常用词或共同前缀/后缀。 有时甚至使用的标点符号也可以帮助确定语言(引用样式和使用等)。
如果这样的图书馆存在,我想知道它,因为我自己在做一个。
在这里你有一个基于bigram统计数据的简单检测器(基本上意味着从一个大集合中学习,每个语言上更频繁地出现bigrams,然后在一段文本中计算,与之前检测到的值相比):
http://allantech.blogspot.com/2007/07/automatic-language-detection.html
这对于许多(大多数?)应用程序来说可能已经足够好了,并且不需要Internet访问。
当然,它的性能会比谷歌或Bing的算法更差(它们本身并不好)。 如果您需要出色的检测性能,您将不得不做很多艰苦的工作和大量的数据。
如果您的应用可以访问互联网,则另一种选择是利用Google或Bing API。
请在此处找到基于3grams分析的C#实现:
你需要一种基于隐马尔可夫链的机器学习算法,处理一堆不同语言的文本。
然后,当它到达未识别的文本时,具有更接近“得分”的语言是赢家。
有一个简单的工具来识别文本语言: http : //www.detectlanguage.com/
我发现“textcat”对此非常有用。 我已经使用PHP实现, PHP Text Cat ,基于这个原始实现 ,并发现它可靠。 如果你看一下这些来源,你会发现用你选择的语言实现它并不是一件非常困难的事情。 艰苦的工作 – 与特定语言相关的字母组合 – 都在那里作为数据。