Tokenizer混乱法国和portugues

时间:2017-05-11 19:14:11

标签: python nltk

我使用过这两个例子

>>> french_tokenizer=nltk.data.load('tokenizers/punkt/french.pickle')
>>> french_tokenizer.tokenize('Deux agressions en quelques jours,voilà ce qui a motivé hier matin le débrayage collège franco-britanique deLp')
['Deux agressions en quelques jours,voil\xc3\xa0 ce qui a motiv\xc3\xa9 hier matin le d\xc3\xa9brayage coll\xc3\xa8ge franco-britanique deLp']
>>> port_tokenizer=nltk.data.load('tokenizers/punkt/portuguese.pickle')
>>> port_tokenizer.tokenize('Seguranças dos aeroportos começam greve de cinco dias no sábado')
['Seguran\xc3\xa7as dos aeroportos come\xc3\xa7am greve de cinco dias no s\xc3\xa1bado']

第一个是法语,第二个是葡萄牙语。为什么我会遇到所有这些问题?第一个​​遇到了

voilà

1 个答案:

答案 0 :(得分:2)

在Python2.7的命令行中键入unicode时,最好使用u'...'

>>> from nltk.tokenize import PunktSentenceTokenizer
>>> frtokenizer = PunktSentenceTokenizer('french')
>>> pttokenizer = PunktSentenceTokenizer('portuguese')
>>> s = u'Deux agressions en quelques jours,voilà ce qui a motivé hier matin le débrayage collège franco-britanique deLp'

>>> frtokenizer.tokenize(s)
[u'Deux agressions en quelques jours,voil\xe0 ce qui a motiv\xe9 hier matin le d\xe9brayage coll\xe8ge franco-britanique deLp']
>>> for sentence in frtokenizer.tokenize(s):
...     print sentence
... 
Deux agressions en quelques jours,voilà ce qui a motivé hier matin le débrayage collège franco-britanique deLp

要获取单词代币,请使用word_token

>>> from nltk import word_tokenize
>>> [word_tokenize(sent) for sent in frtokenizer.tokenize(s)]
[[u'Deux', u'agressions', u'en', u'quelques', u'jours', u',', u'voil\xe0', u'ce', u'qui', u'a', u'motiv\xe9', u'hier', u'matin', u'le', u'd\xe9brayage', u'coll\xe8ge', u'franco-britanique', u'deLp']]
>>> for sentence in frtokenizer.tokenize(s):
...     print word_tokenize(sentence)
... 
[u'Deux', u'agressions', u'en', u'quelques', u'jours', u',', u'voil\xe0', u'ce', u'qui', u'a', u'motiv\xe9', u'hier', u'matin', u'le', u'd\xe9brayage', u'coll\xe8ge', u'franco-britanique', u'deLp']

获取字符串输出而不是字符串列表:

>>> for sentence in frtokenizer.tokenize(s):
...     print ' '.join(word_tokenize(sentence))
... 
Deux agressions en quelques jours , voilà ce qui a motivé hier matin le débrayage collège franco-britanique deLp

在Python2.7中读取unicode文件时:

$ cat somefrench.txt 
Deux agressions en quelques jours,voilà ce qui a motivé hier matin le débrayage collège franco-britanique deLp

$ python

>>> import io
>>> with io.open('somefrench.txt', 'r', encoding='utf8') as fin:
...     for line in fin:
...         print line
... 
Deux agressions en quelques jours,voilà ce qui a motivé hier matin le débrayage collège franco-britanique deLp

并使用word_tokenizePunktSentenceTokenizer

>>> import io
>>> from nltk import word_tokenize
>>> from nltk.tokenize import PunktSentenceTokenizer
>>> frtokenizer = PunktSentenceTokenizer('french')
>>> with io.open('somefrench.txt', 'r', encoding='utf8') as fin:
...     for line in file:
...         for sent in frtokenizer.tokenize(line): # sentences
...             print ' '.join(word_tokenize(sent))
... 
Deux agressions en quelques jours , voilà ce qui a motivé hier matin le débrayage collège franco-britanique deLp

葡萄牙语:

>>> s = u'Seguranças dos aeroportos começam greve de cinco dias no sábado'
>>> pttokenizer = PunktSentenceTokenizer('portuguese')
>>> for sent in pttokenizer.tokenize(s):
...     print ' '.join(word_tokenize(sent))
... 
Seguranças dos aeroportos começam greve de cinco dias no sábado