我正在尝试对法语单词进行标记,但是当我对法语单词进行标记时,包含“^”符号的单词将返回\ 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']
答案 0 :(得分:4)
在Python 2中,要在代码中编写UTF-8文本,您需要在not using ASCII时使用# -*- coding: <encoding name> -*-
启动文件。您还需要在u
之前添加Unicode字符串:
# -*- coding: utf-8 -*-
import nltk
...
data = u"Vous êtes au volant d'une voiture et vous roulez à grande vitesse"
print WhitespaceTokenizer().tokenize(data)
如果您没有在Python代码中编写data
但是从文件中读取它,则必须确保它已被Python正确解码。 codecs
模块在这里有所帮助:
import codecs
codecs.open('fichier.txt', encoding='utf-8')
这是一种很好的做法,因为如果存在编码错误,您将立即知道它:它不会在以后咬你,例如。处理完您的数据后。这也是在Python 3中有效的唯一方法,其中codecs.open
变为open
和decoding is always done right away。更一般地说,避免使用'str'Python 2类型,如瘟疫,并始终坚持使用Unicode字符串,以确保编码正确完成。
推荐读物:
Bon勇气!
答案 1 :(得分:0)
参加Chapter 3 of NTLK中的“使用Unicode进行3.3文本处理”部分。
确保您的字符串前面带有 u ,您应该没问题。另请注意,正如@tripleee建议的那样:
决定在屏幕上呈现字形的因素有很多。如果您确定自己拥有正确的编码,但Python代码仍然无法生成预期的字形,则还应检查系统上是否安装了必要的字体。
答案 2 :(得分:0)
如果它是一个简单的句子,其中标记自然由空格分隔,那么你真的不需要法语的空白标记符。如果不是,nltk.tokenize.word_tokenize()
会更好地为您服务。
请参阅How to print UTF-8 encoded text to the console in Python < 3?
# -*- 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)