2009-09-23 159 views
17

有沒有任何C#庫可以檢測特定文本的語言?即對於輸入文本"This is a sentence",它應該檢測語言"English"。或者對於"Esto es una sentencia"它應該檢測語言爲"Spanish"檢測文本的語言

我知道從文本中檢測語言並不是一個確定性問題。但是Google TranslateBing Translator都有一個「自動檢測」選項,它可以最好地猜測輸入語言。有沒有類似的公開的東西,最好在C#中?

+0

只有一天,我看到了我的企業內部網的網頁之一,谷歌在PC上已安裝翻譯器。該網頁只有幾個詞,例如** mean **和** stddev **以及一些數字。 谷歌翻譯告訴我該網頁是在**羅馬尼亞語**,並問我是否需要翻譯。如果這不是一個**確定性問題**,軟件如何能夠做得很好? – pavium 2009-09-23 07:19:05

+3

他們有時做得很好。當然會有輸入,他們完全失敗,但對於更可能的輸入他們表現相當好 – 2009-09-23 07:22:59

+2

http://stackoverflow.com/questions/1192768/return-the-language-of-a-given-string/1192802 #1192802 – 2009-09-23 08:10:16

回答

0

你會想要一個基於隱馬爾可夫鏈的機器學習算法,處理一堆不同語言的文本。

然後,當它到達未識別的文本時,具有更接近'得分'的語言是贏家。

1

這裏有一個簡單的探測器基於二元統計數據(主要是指從一個大的一套雙字母組更頻繁地出現在各種語言再算上那些在某一段文字,比較您先前檢測值學習):

http://allantech.blogspot.com/2007/07/automatic-language-detection.html

這對許多(大多數?)應用程序來說可能已經足夠,並且不需要Internet訪問。

當然,它會比谷歌或Bing的算法(它們本身並不好)的性能更差。如果你需要優秀的檢測性能,你將不得不做很多艱苦的工作和大量的數據。

如果您的應用程序可以訪問互聯網,另一種方法是利用Google或Bing API。

+1

實際上,這種方法會給出相當不錯的結果。它可以通過使用n-grams而不是bi-grams來改進。然而,分辨非常相似的語言(例如波蘭語和捷克語)總是很難。像希臘語這樣的語言雖然很容易,但... – 2009-09-23 07:23:50

+0

爲了避免誤解,在這種情況下,你認爲什麼叫做很好? – 2009-09-23 07:36:12

2

語言檢測是一件相當困難的事情。

有些語言比其他語言更容易檢測,因爲使用了變音符號和二元符/三字母符號。例如,double-acute accents幾乎全部用於匈牙利語。在土耳其語中,T-comma(而非t-cedilla)僅用於羅馬尼亞語,並且eszett ‘?’僅在德語中出現[我認爲]。

一些有向圖,三元和四元圖也是一個很好的贈品。例如,你很可能會發現‘ eeuw ’和‘ ieuw ’主要在荷蘭和‘ TSCH ’和‘ DSCH ’主要是在德國等

更多贈品將包括使用常用詞或常用前綴/後綴一種特定的語言。有時甚至使用標點符號都可以幫助確定一種語言(引號和用法等)。

如果這樣的圖書館存在,我想知道它,因爲我正在自己工作。

+0

您應該考慮基於訓練語料庫的更通用的基於n-gram的分類器。 – 2010-09-21 12:13:29

0

我發現,「textcat」是這個非常有用的。我使用了基於此this original implementation的PHP實現PHP Text Cat,並發現它可靠。如果你看一下資料來源,你會發現用你選擇的語言來實現並不是一件可怕的事情。辛苦的工作 - 與某種特定語言相關的字母組合 - 都在數據中。

26

確實,TextCat對語言識別非常有用。它有很多不同的語言實現。

.Net中沒有端口。所以我寫了一個:NTextCatNuGet,Online Demo)。

它是純.NET Framework DLL +命令行界面。默認情況下,它使用14種語言的配置文件。

任何反饋非常感謝!新思路和功能要求的歡迎太:)

+1

今天嘗試了NTextCat,它非常容易使用! – 2011-08-01 15:24:57

+0

感謝您使用它!任何特別的反饋非常感謝。請發表您的反饋意見(如有)[本頁](http://ntextcat.codeplex.com/discussions) – 2011-08-15 14:58:26

+0

那麼,它不承認拉脫維亞.. – Edgar 2015-07-17 08:24:46