Sul*_*lli 5 python nltk textblob
我正在使用 NLTK 和 TextBlob 在文本中查找名词和名词短语:
from textblob import TextBlob
import nltk
blob = TextBlob(text)
print(blob.noun_phrases)
tokenized = nltk.word_tokenize(text)
nouns = [word for (word, pos) in nltk.pos_tag(tokenized) if is_noun(pos)]
print(nouns)
Run Code Online (Sandbox Code Playgroud)
如果我的文字是英文的,这很好用,但如果我的文字是法文,那就不行了。
我无法找到如何将此代码调整为法语,我该怎么做?
是否有可以解析的所有语言的列表?
在带有 Python3 的 WSL2 Ubuntu 下,我可以像这样下载 Punkt:
\nimport nltk\nnltk.download(\'punkt\')\nRun Code Online (Sandbox Code Playgroud)\nzip 存档已下载到:
\n/home/my_username/nltk_data/tokenizers/punkt.zip
解压缩后,您将获得许多存储为 Pickle 序列化对象的语言。
\n现在有:
\ntokenizer = nltk.data.load(\'path/to/punkt_folder/french.pickle\')
您可以使用以下tokenizer._tokenize_words方法:
words_generator = tokenizer._tokenize_words("Depuis huit jours, j\'avais d\xc3\xa9chir\xc3\xa9 mes bottines Aux cailloux des chemins. J\'entrais \xc3\xa0 Charleroi. - Au Cabaret-Vert : je demandai des tartines De beurre et du jambon qui f\xc3\xbbt \xc3\xa0 moiti\xc3\xa9 froid.")\nwords = [word for word in words_generator]\nRun Code Online (Sandbox Code Playgroud)\nWords 是一个对象列表PunktToken:
>>> words\n[PunktToken(\'Depuis\', type=\'depuis\', linestart=True), PunktToken(\'huit\', ), PunktToken(\'jours\', ),... PunktToken(\'\xc3\xa0\', ), PunktToken(\'moiti\xc3\xa9\', ), PunktToken(\'froid.\', )]\n>>> str_words = [str(w) for w in words]\n>>> str_words\n[\'Depuis\', \'huit\', \'jours\', \',\', \'j\', "\'avais", \'d\xc3\xa9chir\xc3\xa9\', \'mes\', \'bottines\', \'Aux\', \'cailloux\', \'des\', \'chemins.\', \'J\', "\'entrais", \'\xc3\xa0\', \'Charleroi.\', \'-\', \'Au\', \'Cabaret-Vert\', \':\', \'je\', \'demandai\', \'des\', \'tartines\', \'De\', \'beurre\', \'et\', \'du\', \'jambon\', \'qui\', \'f\xc3\xbbt\', \'\xc3\xa0\', \'moiti\xc3\xa9\', \'froid.\']\nRun Code Online (Sandbox Code Playgroud)\nnltk.pos_tag与法语句子一起使用OP想要使用nltk.pos_tag. 用前面描述的方法是不可能的。
一种方法似乎是安装用JAVA编码的Standford Tagger (在另一个SO问题中找到)
\n下载最新版本的Standford Tagger(此处提供)
\n> wget https://nlp.stanford.edu/software/stanford-tagger-4.2.0.zip\nRun Code Online (Sandbox Code Playgroud)\n解压后,您将得到一个如下所示的文件夹(OP询问可用语言列表):
\nwords_generator = tokenizer._tokenize_words("Depuis huit jours, j\'avais d\xc3\xa9chir\xc3\xa9 mes bottines Aux cailloux des chemins. J\'entrais \xc3\xa0 Charleroi. - Au Cabaret-Vert : je demandai des tartines De beurre et du jambon qui f\xc3\xbbt \xc3\xa0 moiti\xc3\xa9 froid.")\nwords = [word for word in words_generator]\nRun Code Online (Sandbox Code Playgroud)\nJava 必须安装并且您必须知道在哪里。现在你可以这样做:
\n>>> words\n[PunktToken(\'Depuis\', type=\'depuis\', linestart=True), PunktToken(\'huit\', ), PunktToken(\'jours\', ),... PunktToken(\'\xc3\xa0\', ), PunktToken(\'moiti\xc3\xa9\', ), PunktToken(\'froid.\', )]\n>>> str_words = [str(w) for w in words]\n>>> str_words\n[\'Depuis\', \'huit\', \'jours\', \',\', \'j\', "\'avais", \'d\xc3\xa9chir\xc3\xa9\', \'mes\', \'bottines\', \'Aux\', \'cailloux\', \'des\', \'chemins.\', \'J\', "\'entrais", \'\xc3\xa0\', \'Charleroi.\', \'-\', \'Au\', \'Cabaret-Vert\', \':\', \'je\', \'demandai\', \'des\', \'tartines\', \'De\', \'beurre\', \'et\', \'du\', \'jambon\', \'qui\', \'f\xc3\xbbt\', \'\xc3\xa0\', \'moiti\xc3\xa9\', \'froid.\']\nRun Code Online (Sandbox Code Playgroud)\n它将显示:
\n[(\'Depuis\', \'ADP\'), (\'huit\', \'NUM\'), (\'jours,\', \'NOUN\'), ("j\'avais", \'ADJ\'), (\'d\xc3\xa9chir\xc3\xa9\', \'VERB\'), (\'mes\', \'DET\'), (\'bottines\', \'NOUN\'), (\'Aux\', \'PROPN\'), (\'cailloux\', \'VERB\'), (\'des\', \'DET\'), (\'chemins.\', \'NOUN\'), ("J\'entrais", \'ADJ\'), (\'\xc3\xa0\', \'ADP\'), (\'Charleroi.\', \'PROPN\'), (\'-\', \'PUNCT\'), (\'Au\', \'PROPN\'), (\'Cabaret-Vert\', \'PROPN\'), (\':\', \'PUNCT\'), (\'je\', \'PRON\'), (\'demandai\', \'VERB\'), (\'des\', \'DET\'), (\'tartines\', \'NOUN\'), (\'De\', \'ADP\'), (\'beurre\', \'NOUN\'), (\'et\', \'CCONJ\'), (\'du\', \'DET\'), (\'jambon\', \'NOUN\'), (\'qui\', \'PRON\'), (\'f\xc3\xbbt\', \'AUX\'), (\'\xc3\xa0\', \'ADP\'), (\'moiti\xc3\xa9\', \'NOUN\'), (\'froid.\', \'ADJ\')]\nRun Code Online (Sandbox Code Playgroud)\n等等\xc3\xa0!
\n默认情况下,NLTK 使用英语分词器,这在法语中会产生奇怪或未定义的行为。
\n@fpierron 是正确的。如果您阅读了它提到的文章,您只需加载正确的分词器语言模型并在您的程序中使用它即可。
\nimport nltk.data\n#chargement du tokenizer\ntokenizer = nltk.data.load(\'tokenizers/punkt/french.pickle\')\ntokens = tokenizer.tokenize("Jadis, une nuit, je fus un papillon, voltigeant, content de son sort. Puis, je m\xe2\x80\x99\xc3\xa9veillai, \xc3\xa9tant Tchouang-tseu. Qui suis-je en r\xc3\xa9alit\xc3\xa9 ? Un papillon qui r\xc3\xaave qu\xe2\x80\x99il est Tchouang-tseu ou Tchouang qui s\xe2\x80\x99imagine qu\xe2\x80\x99il fut papillon ?")\n\nprint(tokens) \n\n[\'Jadis, une nuit, je fus un papillon, voltigeant, content de son sort.\', \'Puis, je m\xe2\x80\x99\xc3\xa9veillai, \xc3\xa9tant Tchouang-tseu.\', \'Qui suis-je en r\xc3\xa9alit\xc3\xa9 ?\', \'Un papillon qui r\xc3\xaave qu\xe2\x80\x99il est Tchouang-tseu ou Tchouang qui s\xe2\x80\x99imagine qu\xe2\x80\x99il fut papillon ?\']\nRun Code Online (Sandbox Code Playgroud)\n如果您没有正确的文件,您可以使用“nltk.download()”下载正确的法语模型。
\n如果您查看 NLTK 网站上的分词器,还有一些其他示例。http://www.nltk.org/api/nltk.tokenize.html
\n