2012-10-23 49 views
15

我正在使用NLTKword_tokenizer將句子分成單詞。使用NLTK令牌化阿拉伯語詞彙

我要來標記這句話:

في_بيتنا كل شي لما تحتاجه يضيع ...ادور على شاحن فجأة يختفي ..لدرجة اني اسوي نفسي ادور شيء 

我寫的代碼是:

import re 
import nltk 

lex = u" في_بيتنا كل شي لما تحتاجه يضيع ...ادور على شاحن فجأة يختفي ..لدرجة اني اسوي نفسي ادور شيء" 

wordsArray = nltk.word_tokenize(lex) 
print " ".join(wordsArray) 

的問題是,word_tokenize功能不通過的話分裂。相反,它通過字母拆分,以便輸出爲:

"ف ي _ ب ي ت ن ا ك ل ش ي ل م ا ت ح ت ا ج ه ي ض ي ع ... ا د و ر ع ل ى ش ا ح ن ف ج أ ة ي خ ت ف ي .. ل د ر ج ة ا ن ي ا س و ي ن ف س ي ا د و ر ش ي ء" 

任何想法?

到目前爲止,我已經到了什麼:

通過here試圖文本,它似乎是由字母標記化。另外,其他標記器也會正確標記它。這是否意味着word_tokenize僅適用於英語?這是否適用於大多數NLTK功能?

+1

是否http://stackoverflow.com/questions/7386856/python-arabic-nlp幫助嗎? (和stemmer http://nltk.org/api/nltk.stem.html#module-nltk.stem.isri) –

回答

6

我總是建議使用nltk.tokenize.wordpunct_tokenize。您可以嘗試使用許多NLTK令牌處理器,請致電http://text-processing.com/demo/tokenize/

+0

大多數這些分詞器之間有什麼區別?這是否意味着大多數NLTK函數將不適用於阿拉伯語? –

+2

TreebankWordTokenizer在華爾街日報文本上進行了培訓,該文本是ascii,因此它在unicode文本上效果不佳。 PunctWordTokenizer接受更多種類的文本的培訓,但我發現它比其他人更難以預測,它們使用正則表達式,使它們可用於任何語言,並具有可預測的結果。 – Jacob

+0

NLTK一般用阿拉伯語和任何unicode文本工作得很好,只是有些模型期望ascii,因此不適合unicode。 – Jacob

0

這是我輸出我的代碼得到的,但我記得的Unicode並不在Python 2順利,我用3.5

nltk.word_tokenize('في_بيتنا كل شي لما تحتاجه يضيع ...ادور على شاحن فجأة يختفي ..لدرجة اني اسوي نفسي ادور شيء ') 

[ 'في_بيتنا', 'كل', 「شي ' 'لما', 'تحتاجه', 'يضيع', ' ...', 'ادور', 'على', 'شاحن', 'فجأة', 'يختفي', '..لدرجة', 'اني', 'اسوي', 'نفسي', 'ادور', 'شيء']