使用nltk在法语中进行标记

时间:2013-09-01 11:13:06

标签: python-2.7 nlp nltk

我正在尝试对法语单词进行标记,但是当我对法语单词进行标记时,包含“^”符号的单词将返回\ 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']

3 个答案:

答案 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变为opendecoding 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)