使用nltk进行法语分词

3
我正在尝试对法语单词进行分词,但是当我对包含“^”符号的单词进行分词时,会返回\xe。以下是我实现的代码。
import nltk
from nltk.tokenize import WhitespaceTokenizer
from nltk.tokenize import SpaceTokenizer
from nltk.tokenize import RegexpTokenizer
data = "Vous êtes au volant d'une voiture et vous roulez à vitesse"
#wst = WhitespaceTokenizer()
#tokenizer = RegexpTokenizer('\s+', gaps=True)
token=WhitespaceTokenizer().tokenize(data)
print token

我得到的输出

['Vous', '\xeates', 'au', 'volant', "d'une", 'voiture', 'et', 'vous', 'roulez', '\xe0', 'vitesse']

期望的输出结果

['Vous', 'êtes', 'au', 'volant', "d'une", 'voiture', 'et', 'vous', 'roulez', 'à', 'vitesse']

你的输入文件使用了什么字符集?你是否已经在Python中声明了输入编码?另请参阅http://nedbatchelder.com/text/unipain.html。 - tripleee
utf-8 和尝试过了,我将法语文本添加到一个文件中并以 utf-8 编码保存,但输出结果仍然相同。fp = open('C:\Temp\utf.txt','rb') data = fp.read().decode('utf-8-sig') - user2737152
3个回答

4
在Python 2中,如果您要在代码中编写UTF-8文本,则需要在文件开头使用# -*- coding: <encoding name> -*-(当不使用ASCII时)。您还需要在Unicode字符串前加上u
# -*- coding: utf-8 -*-

import nltk
...

data = u"Vous êtes au volant d'une voiture et vous roulez à grande vitesse"
print WhitespaceTokenizer().tokenize(data)

当你不是在Python代码中编写数据,而是从文件中读取数据时,你必须确保Python正确解码它。这里可以使用codecs模块来帮助:
import codecs

codecs.open('fichier.txt', encoding='utf-8')

这是一个好的实践,因为如果存在编码错误,你会立刻知道它:它不会在处理数据后咬你。这也是Python 3中唯一可行的方法,在那里codecs.open变成了open解码总是立即完成。更普遍地说,要像瘟疫一样避免使用Python 2中的'str'类型,并始终坚持使用Unicode字符串以确保正确完成编码。
推荐阅读:

祝你好运!


感谢您导入编解码器,使文件得以进行词干提取,因为在我尝试对文件进行词干提取时出现错误。输出结果保持不变,但我使用了 print " ".join,这使得输出结果符合我的需求。感谢您的帮助。 - user2737152

0

如果是一个简单的句子,单词之间由空格自然分隔,则不需要使用空格分词器处理法语。否则,nltk.tokenize.word_tokenize() 更适合你。

请参阅如何在Python < 3中将UTF-8编码的文本打印到控制台?

# -*- coding: utf-8 -*-

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

sentence = "Vous êtes au volant d'une voiture et vous roulez à grande $3.88 vitesse"
print sentence.split()

from nltk.tokenize import word_tokenize
print word_tokenize(sentence)

from nltk.tokenize import wordpunct_tokenize
print wordpunct_tokenize(sentence)

0

请看一下《NTLK 第3章》的第3.3节 "Unicode 文本处理"部分

确保您的字符串前面加上u,这样应该就没问题了。还要注意一下那一章里提到的,正如@tripleee所建议的:

屏幕上呈现哪些字形有很多因素决定。如果您确定已经使用了正确的编码,但是您的Python代码仍然无法产生您预期的字形,请确保您的系统上安装了必要的字体。


我已经在前面添加了一个“u”,但仍然得到相同的输出。 - user2737152

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接