1. 程式人生 > >如何自動檢測一段文字的語言

如何自動檢測一段文字的語言

學習自然語言處理有一段時間了,其實我做的無非就是一些表面功夫,學到最後,還是機器學習頂用。

如題,最近在做一個課題,需要檢測一段文字的語言,去掉非英文的文字。

我搜集了一些資料,總結一下:

需要用到Python,以及NLTK包,你可以pip install nltk。

原文在這裡:http://blog.alejandronolla.com/2013/05/15/detecting-text-language-with-python-and-nltk/

首先我把程式碼貼下來(作者年代久遠,我修改成3.X版本的語法):

from nltk import wordpunct_tokenize
from nltk.corpus import stopwords
def _calculate_languages_ratios(text):
    languages_ratios = {}
    tokens = wordpunct_tokenize(text)
    words = [word.lower() for word in tokens]
    for language in stopwords.fileids():
        stopwords_set = set(stopwords.words(language))
        words_set = set(words)
        common_elements = words_set.intersection(stopwords_set)
        languages_ratios[language] = len(common_elements) # language "score"
    return languages_ratios
def detect_language(text):
    ratios = _calculate_languages_ratios(text)
    most_rated_language = max(ratios, key=ratios.get)
    return most_rated_language
if __name__ == '__main__':
    content = '''
    Es lo mejor para idiomas aunque me gustaría que ya viniera aplicado en vez de tanto chouu
    '''
    language = detect_language(content)
    print(language)

不想知道原理的,可以直接把程式碼COPY過去。

其實原理很簡單,就是按照句子切詞,然後統計停用詞的頻率,算出一個比例,比例最大,就把該段文字判斷為何種型別。

這種方法比較精巧,我估計精確度可以達到70%以上,假如要提高準確性,我們必須得用到Machine Learning的知識,訓練一些樣本。至於這個演算法怎麼設計,我個人能力有限,有興趣的可以聯絡我,我們可以一起深入探討。