Python 2.7 使用nltk的法语标记化

Python 2.7 使用nltk的法语标记化,python-2.7,nlp,nltk,Python 2.7,Nlp,Nltk,我试图标记法语单词,但当我标记法语单词时,包含“^”符号的单词返回\xe 我得到的输出 ['Vous', '\xeates', 'au', 'volant', "d'une", 'voiture', 'et', 'vous', 'roulez', '\xe0', 'vitesse'] 期望输出 ['Vous', 'êtes', 'au', 'volant', "d'une", 'voiture', 'et', 'vous', 'roulez', 'à', 'vitesse'] 请阅读中的“

我试图标记法语单词,但当我标记法语单词时,包含“^”符号的单词返回\xe

我得到的输出

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

['Vous', 'êtes', 'au', 'volant', "d'une", 'voiture', 'et', 'vous', 'roulez', 'à', 'vitesse']
请阅读中的“使用Unicode进行3.3文本处理”一节

确保您的字符串前面有一个u,您应该可以。还从该章中注意到,正如@tripleee所建议的:

有许多因素决定在屏幕上渲染哪些图示符。如果确定编码正确,但Python代码仍然无法生成预期的字形,那么还应该检查系统上是否安装了必要的字体


在Python2中,要在代码中写入UTF-8文本,您需要在开始时使用
#-*-编码:-*-
。您还需要在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对其进行了正确解码。
编解码器
模块在此提供帮助:

import codecs

codecs.open('fichier.txt', encoding='utf-8')
这是一个很好的实践,因为如果有编码错误,您将立即知道:它不会在以后咬您,例如在处理数据之后。这也是Python3中唯一有效的方法,在Python3中,
codecs.open
变成了
open
和。更一般地说,避免像瘟疫一样使用“str”python2类型,并始终坚持使用Unicode字符串,以确保正确完成编码

推荐阅读资料:


祝你勇敢

如果是一个简单的句子,标记自然地由空格分隔,那么法语就不需要空白标记器。如果不是的话,
nltk.tokenize.word\u tokenize()
会更好地为您服务

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


输入文件的字符集是什么?您是否已将输入编码声明为Python?另请参见utf-8并尝试,我在文件中添加了法语文本并以utf-8编码保存,但输出保持不变。fp=open('C:\\Temp\\utf.txt','rb')data=fp.read().decode('utf-8-sig')我确实使用了一个u作为前缀,但仍然得到相同的输出Hanks,导入编解码器允许对文件进行阻止,因为在我尝试阻止文件时它返回错误。输出是相同的,但我使用了print“”.join提供了我所需的输出。感谢您的帮助。
import codecs

codecs.open('fichier.txt', encoding='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)