使用NLTK对阿拉伯语单词进行标记

Had*_*har 20 python tokenize nltk

我正在使用NLTK word_tokenizer将句子分成单词.

我想将这句话标记为:

??_????? ?? ?? ??? ?????? ???? ...???? ??? ???? ???? ????? ..????? ??? ???? ???? ???? ??? 
Run Code Online (Sandbox Code Playgroud)

我写的代码是:

import re
import nltk

lex = u" ??_????? ?? ?? ??? ?????? ???? ...???? ??? ???? ???? ????? ..????? ??? ???? ???? ???? ???"

wordsArray = nltk.word_tokenize(lex)
print " ".join(wordsArray)
Run Code Online (Sandbox Code Playgroud)

问题是该word_tokenize功能不会被单词拆分.相反,它按字母分割,以便输出为:

"? ? _ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ... ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? .. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

到目前为止我所达到的目标:

通过尝试这里的文本,它似乎被字母标记.但是,其他标记符也正确地标记了它.这是否意味着word_tokenize仅限英语?这是否适用于大多数NLTK功能?

Jac*_*cob 8

我总是建议使用nltk.tokenize.wordpunct_tokenize.您可以在http://text-processing.com/demo/tokenize/上试用许多NLTK标记器,并亲自查看.

  • TreebankWordTokenizer是在街道日记文本上训练的,这是ascii,所以它在unicode文本上永远不会很好.PunctWordTokenizer是针对更多种类的文本进行训练的,但是我发现它比其他文本更难以预测,它们使用正则表达式,使它们可以在任何语言上使用,并具有可预测的结果. (4认同)