Я использую пакет 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/
Если 'stopwords', предлагаемый' nltk', вам не подходит, тогда вы должны сделать свой собственный список со стоп-словами, которые хотите удалить, или искать другую библиотеку. Что касается запятых ',' вы можете попробовать 'newstr = oldstr.replace (", "," ")' во всем тексте, перед любой другой работой над ним. – tomasyany
Хорошо для ваших предложений. Но почему функция «nltk stopwords» не выполняет работу, которую она должна выполнять? !!! – rom
Я взглянул на французские 'stopwords' из' nltk', и я бы сказал, что он довольно полный (я также говорю по-французски). Еще несколько слов, таких как «ils», «elles», «les», «leurs» (в основном множественные числа), и это будет сделано. Я догадался, что ребята, написавшие «Stopwords Corpus», который используется в 'nltk', не знали француза так хорошо. Но это не то, что мы можем жаловаться, ведь они дали нам великолепную библиотеку бесплатно! – tomasyany