2017-04-12 59 views
3

我使用NltkScikit Learn來做一些文本處理。但是,在我的文件清單中,我有一些文件不是英文的。例如,下面可能是真的:確定文本是否爲英文?

[ "this is some text written in English", 
    "this is some more text written in English", 
    "Ce n'est pas en anglais" ] 

對於我分析的目的,我想這不是英文句子都作爲預處理的一部分被移除。但是,有沒有一種好方法可以做到這一點?我一直在谷歌搜索,但無法找到任何具體的東西,可以讓我認識到,如果字符串是英文或不。這是不是作爲NltkScikit learn的功能提供? 編輯我見過類似thisthis的問題,但都是針對單個單詞...不是「文檔」。我是否需要遍歷句子中的每個單詞來檢查整個句子是否是英文的?

我正在使用Python,所以Python中的庫會更好,但如果需要,我可以切換語言,只是認爲Python會是最好的。

回答

3

有一個叫langdetect的庫。它是從這裏獲得谷歌的語言檢測移植:

https://pypi.python.org/pypi/langdetect

它支持55種語言的開箱。

+0

正是我一直在尋找的感謝! :)只是一個問題,你知道這個庫在長文件上的表現嗎? – ocean800

+1

我沒有用過它。在這裏分享你的經驗將會很棒。 – salehinejad

+0

不幸的是,它在很多文檔上都很慢,但是謝謝! – ocean800

1

使用附魔庫

import enchant 

dictionary = enchant.Dict("en_US") #also available are en_GB, fr_FR, etc 

dictionary.check("Hello") # prints True 
dictionary.check("Helo") #prints False 

這個例子是,如果你想要的東西輕量級直接從他們的website

+0

感謝這個圖書館看起來很有趣。你知道任何有關長文檔字符串的這個庫的性能嗎? – ocean800

+0

我沒用過很長的文檔字符串;我爲此訓練了自己的模型。試試看看這個圖書館是否足夠強大!它也有自己的拼寫檢查器(圖書館的主要目的) – lordingtar

+0

將試試看,看哪個庫更好,謝謝:) – ocean800

1

拍攝,信卦是一種流行的做法。每種語言都有一個不同的普通和不常見三角形「輪廓」。你可以谷歌周圍,或自己的代碼。下面是我碰到一個樣本實現,它使用「餘弦相似性」作爲距離的示例文本和參照數據之間的措施:

http://code.activestate.com/recipes/326576-language-detection-using-character-trigrams/

如果你知道你的語料庫中常見的非英語語言,把它變成一個是/否的測試是很容易的。如果你不這樣做,你需要預測你沒有三元組統計數據的語言句子。我會做一些測試,以查看文檔中單句文本的正常範圍的相似性分數,併爲英語餘弦分數選擇合適的閾值。

+0

感謝您的答案!只是一個問題,你知道關於在大型數據集上的性能嗎? – ocean800

+1

Trigram模型很快...沒有太多的事情要做。但是,「大數據集」是什麼意思?如果你的每一份文件都是單一語言,並且你有太多的文件來計算整個文件的遏制速度會讓你放慢速度,那麼在幾個晦澀的單詞後停下來。 – alexis

1

您可能對我的論文The WiLI benchmark dataset for written language identification感興趣。我也對一些工具進行了基準測試。

TL; DR:

  • CLD-2是非常好,非常快
  • lang-detect是一點點好轉,但慢得多
  • LANGID是好的,但CLD-2和朗檢測更好
  • NLTK的Textcat既不高效也不有效。

您可以安裝lidtk和分類語言:

$ lidtk cld2 predict --text "this is some text written in English" 
eng 
$ lidtk cld2 predict --text "this is some more text written in English" 
eng 
$ lidtk cld2 predict --text "Ce n'est pas en anglais"     
fra