我正在使用python nltk
包来查找法语文本中最常用的单词。我觉得它不起作用......
这是我的代码:
#-*- coding: utf-8 -*-
#nltk: package for text analysis
from nltk.probability import FreqDist
from nltk.corpus import stopwords
import nltk
import tokenize
import codecs
import unicodedata
#output French accents correctly
def convert_accents(text):
return unicodedata.normalize('NFKD', text).encode('ascii', 'ignore')
### MAIN ###
#openfile
text_temp=codecs.open('text.txt','r','utf-8').readlines()
#put content in a list
text=[]
for word in text_temp:
word=word.strip().lower()
if word!="":
text.append(convert_accents(word))
#tokenize the list
text=nltk.tokenize.word_tokenize(str(text))
#use FreqDist to get the most frequents words
fdist = FreqDist()
for word in text:
fdist.inc( word )
print "BEFORE removing meaningless words"
print fdist.items()[:10]
#use stopwords to remove articles and other meaningless words
for sw in stopwords.words("french"):
if fdist.has_key(sw):
fdist.pop(sw)
print "AFTER removing meaningless words"
print fdist.items()[:10]
这是输出:
BEFORE removing meaningless words
[(',', 85), ('"', 64), ('de', 59), ('la', 47), ('a', 45), ('et', 40), ('qui', 39), ('que', 33), ('les', 30), ('je', 24)]
AFTER removing meaningless words
[(',', 85), ('"', 64), ('a', 45), ('les', 30), ('parce', 15), ('veut', 14), ('exigence', 12), ('aussi', 11), ('pense', 11), ('france', 10)]
我的问题是stopwords
并没有丢弃所有无意义的词。
例如','不是一个单词,应该被删除,'les'是一篇文章,应该删除。
如何解决问题?
我使用的文字可以在这个页面找到: http://www.elysee.fr/la-presidence/discours-d-investiture-de-nicolas-sarkozy/
答案 0 :(得分:6)
通常最好使用自己的停用词列表。为此,您可以从here获取法语停用词列表。文章“les”也在列表中。创建它们的文本文件,并使用该文件从语料库中删除停用词。然后为了标点符号,你必须写一个标点符号删除功能。你应该怎么写,高度取决于你的应用程序。但只是为了向您展示一些可以帮助您入门的示例,您可以写下:
import string
t = "hello, eric! how are you?"
print t.translate(string.maketrans("",""), string.punctuation)
,输出为:
hello eric how are you
或者,另一种方式是简单地写:
t = t.split()
for w in t:
w = w.strip('\'"?,.!_+=-')
print w
所以,这实际上取决于你需要如何删除它们。在某些情况下,这些方法可能不会产生您想要的结果。但是,你可以建立它们。如果您有任何其他问题,请与我们联系。