我使用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)
如果我的文字是英文的话,这样可以正常工作,但如果我的文字是法文,那就不再好了。
我无法找到如何使这段代码适应法语,我该怎么做?
是否有可以解析的所有语言的某个列表?
答案 0 :(得分:2)
默认情况下,NLTK使用英语标记符,对于法语,它将具有奇怪或未定义的行为。
@fpierron是对的。如果您阅读它提到的文章,您只需加载正确的标记化语言模型并在程序中使用它。
import nltk.data
# chargement du tokenizer
tokenizer = nltk.data.load('tokenizers/punkt/PY3/french.pickle')
tokens = tokenizer.tokenize("Jadis, une nuit, je fus un papillon, voltigeant, content de son sort. Puis, je m’éveillai, étant Tchouang-tseu. Qui suis-je en réalité ? Un papillon qui rêve qu’il est Tchouang-tseu ou Tchouang qui s’imagine qu’il fut papillon ?")
print(tokens)
['Le', 'courage', 'de', 'la', 'goutte', 'd', "'", 'eau', ',', 'c', "'", 'est', 'qu', "'", 'elle', 'ose', 'tomber', 'dans', 'le', 'désert', '.']
如果您没有正确的文件,可以使用" nltk.download()"下载正确的法国模型。
如果你看一下令牌器上的NLTKs网站,还有其他一些例子。 http://www.nltk.org/api/nltk.tokenize.html
答案 1 :(得分:1)
我建议你这篇文章可以解决你的问题:http://blog.fouadhamdi.com/introduction-a-nltk/
答案 2 :(得分:0)
在带有 Python3 的 WSL2 Ubuntu 下,我可以像这样下载 Punkt:
import nltk
nltk.download('punkt')
zip 存档已下载到:
/home/my_username/nltk_data/tokenizers/punkt.zip
解压后,您已经将许多语言存储为 Pickle 的序列化对象。
现在:
tokenizer = nltk.data.load('path/to/punkt_folder/french.pickle')
您可以使用 tokenizer._tokenize_words
方法:
words_generator = tokenizer._tokenize_words("Depuis huit jours, j'avais déchiré mes bottines Aux cailloux des chemins. J'entrais à Charleroi. - Au Cabaret-Vert : je demandai des tartines De beurre et du jambon qui fût à moitié froid.")
words = [word for word in words_generator]
words 是一个 PunktToken
对象列表:
>>> words
[PunktToken('Depuis', type='depuis', linestart=True), PunktToken('huit', ), PunktToken('jours', ),... PunktToken('à', ), PunktToken('moitié', ), PunktToken('froid.', )]
>>> str_words = [str(w) for w in words]
>>> str_words
['Depuis', 'huit', 'jours', ',', 'j', "'avais", 'déchiré', 'mes', 'bottines', 'Aux', 'cailloux', 'des', 'chemins.', 'J', "'entrais", 'à', 'Charleroi.', '-', 'Au', 'Cabaret-Vert', ':', 'je', 'demandai', 'des', 'tartines', 'De', 'beurre', 'et', 'du', 'jambon', 'qui', 'fût', 'à', 'moitié', 'froid.']
nltk.pos_tag
OP 想要使用 nltk.pos_tag
。用前面描述的方法是不可能的。
一种方法似乎是安装 Standford Tagger,它已经用 JAVA 编码(在另一个 SO question 中找到)
下载最新版本的 Standford Tagger (Available here)
> wget https://nlp.stanford.edu/software/stanford-tagger-4.2.0.zip
解压后,您将获得一个如下所示的文件夹(OP 询问可用语言列表):
...
├── data
│ ....
├── models
...
│ ├── arabic-train.tagger
│ ├── arabic-train.tagger.props
│ ├── arabic.tagger
│ ├── arabic.tagger.props
│ ├── chinese-distsim.tagger
│ ├── chinese-distsim.tagger.props
│ ├── chinese-nodistsim.tagger
│ ├── chinese-nodistsim.tagger.props
│ ├── english-bidirectional-distsim.tagger
│ ├── english-bidirectional-distsim.tagger.props
│ ├── english-caseless-left3words-distsim.tagger
│ ├── english-caseless-left3words-distsim.tagger.props
│ ├── english-left3words-distsim.tagger
│ ├── english-left3words-distsim.tagger.props
│ ├── french-ud.tagger
│ ├── french-ud.tagger.props
│ ├── german-ud.tagger
│ ├── german-ud.tagger.props
│ ├── spanish-ud.tagger
│ └── spanish-ud.tagger.props
─ french-ud.tagger.props
...
├── stanford-postagger-4.2.0.jar
...
Java 必须安装并且你必须知道在哪里。现在你可以这样做:
import os
from nltk.tag import StanfordPOSTagger
from textblob import TextBlob
jar = 'path/to/stanford-postagger-full-2020-11-17/stanford-postagger.jar'
model = 'path/to/stanford-postagger-full-2020-11-17/models/french-ud.tagger'
os.environ['JAVAHOME'] = '/path/to/java'
blob = TextBlob("""
Depuis huit jours, j'avais déchiré mes bottines Aux cailloux des chemins. J'entrais à Charleroi. - Au Cabaret-Vert : je demandai des tartines De beurre et du jambon qui fût à moitié froid.
""")
pos_tagger = StanfordPOSTagger(model, jar, encoding='utf8' )
res = pos_tagger.tag(blob.split())
print(res)
它会显示:
[('Depuis', 'ADP'), ('huit', 'NUM'), ('jours,', 'NOUN'), ("j'avais", 'ADJ'), ('déchiré', 'VERB'), ('mes', 'DET'), ('bottines', 'NOUN'), ('Aux', 'PROPN'), ('cailloux', 'VERB'), ('des', 'DET'), ('chemins.', 'NOUN'), ("J'entrais", 'ADJ'), ('à', '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ût', 'AUX'), ('à', 'ADP'), ('moitié', 'NOUN'), ('froid.', 'ADJ')]
等等!