Python:NLTK 和 TextBlob(法语)

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)

如果我的文字是英文的,这很好用,但如果我的文字是法文,那就不行了。

我无法找到如何将此代码调整为法语,我该怎么做?

是否有可以解析的所有语言的列表?

sno*_*ogg 5

使用 NLTK 从法语句子中提取单词

\n

在带有 Python3 的 WSL2 Ubuntu 下,我可以像这样下载 Punkt:

\n
import nltk\nnltk.download(\'punkt\')\n
Run Code Online (Sandbox Code Playgroud)\n

zip 存档已下载到:

\n

/home/my_username/nltk_data/tokenizers/punkt.zip

\n

解压缩后,您将获得许多存储为 Pickle 序列化对象的语言。

\n

现在有:

\n

tokenizer = nltk.data.load(\'path/to/punkt_folder/french.pickle\')

\n

您可以使用以下tokenizer._tokenize_words方法:

\n
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]\n
Run Code Online (Sandbox Code Playgroud)\n

Words 是一个对象列表PunktToken

\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.\']\n
Run Code Online (Sandbox Code Playgroud)\n

nltk.pos_tag与法语句子一起使用

\n

OP想要使用nltk.pos_tag. 用前面描述的方法是不可能的。

\n

一种方法似乎是安装用JAVA编码的Standford Tagger (在另一个SO问题中找到)

\n

下载最新版本的Standford Tagger此处提供

\n
> wget https://nlp.stanford.edu/software/stanford-tagger-4.2.0.zip\n
Run Code Online (Sandbox Code Playgroud)\n

解压后,您将得到一个如下所示的文件夹(OP询问可用语言列表):

\n
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]\n
Run Code Online (Sandbox Code Playgroud)\n

Java 必须安装并且您必须知道在哪里。现在你可以这样做:

\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.\']\n
Run 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\')]\n
Run Code Online (Sandbox Code Playgroud)\n

等等\xc3\xa0!

\n


Nat*_*Coy 3

默认情况下,NLTK 使用英语分词器,这在法语中会产生奇怪或未定义的行为。

\n

@fpierron 是正确的。如果您阅读了它提到的文章,您只需加载正确的分词器语言模型并在您的程序中使用它即可。

\n
import 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 ?\']\n
Run Code Online (Sandbox Code Playgroud)\n

如果您没有正确的文件,您可以使用“nltk.download()”下载正确的法语模型。

\n

如果您查看 NLTK 网站上的分词器,还有一些其他示例。http://www.nltk.org/api/nltk.tokenize.html

\n

  • 您显示的标记不是句子的标记:您使用的是两个不同的句子“Jadis je fus un papillon voltigeant ...”和“Le pleasure de la goutte d'eau c'est ...” (6认同)