使用NLTK
代码
import nltk
from nltk.tokenize import word_tokenize # https://www.tutorialspoint.com/python_data_science/python_word_tokenization.htm
from nltk.stem.snowball import SnowballStemmer # https://www.nltk.org/howto/stem.html
from nltk.probability import FreqDist # http://www.nltk.org/api/nltk.html?highlight=freqdist
from nltk.corpus import stopwords # https://www.geeksforgeeks.org/removing-stop-words-nltk-python/
def freq_dist(s, language):
" Frequency count based upon language"
# Language based stops words and stemmer
fr_stopwords = stopwords.words(language)
fr_stemmer = SnowballStemmer(language)
# Language based tokenization
words = word_tokenize(s, language = language)
return FreqDist(fr_stemmer.stem(w) for w in words if w.isalnum() and not w in fr_stopwords)
说明
Pandas DataFrame 中的初始数据。以字符串形式获取法语列。
s = '\n'.join(df['French'].tolist())
上面的函数freq_dist对其输入字符串执行以下操作。
根据语言标记字符串
words = word_tokenize(s, language='french')
删除标点符号(即“ ? , . 等)
punctuation_removed = [w for w in words if w.isalnum()]
获取法语停用词
french_stopwords = set(stopwords.words('french')) # make set for faster lookup
删除停用词
without_stopwords = [w for w in punctuation_removed if not w in french_stopwords]
词干(也去掉大小写)
获取法语词干分析器并应用词干分析器
french_stemmer = SnowballStemmer('french')
词干
stemmed_words = [french_stemmer.stem(w) for w in without_stopwords]
使用 FreqDist 进行频率分布
fDist = FreqDist(stemmed_words)
示例
数据帧:
French
0 Ho comprato un appartamento in centro
1 Il tuo appartamento è stupendo
2 Quanti vani ha la tua casa?
3 Il mercato immobiliare è in crisi
4 Qui vivra verra
5 L’habit ne fait pas le moine
6 Chacun voit midi à sa porte
7 Mieux vaut prévenir que guérir
8 Petit a petit, l’oiseau fait son nid
9 Qui court deux lievres a la fois, n’en prend a...
10 Qui n’avance pas, recule
11 Quand on a pas ce que l’on aime, il faut aimer...
12 Il n’y a pas plus sourd que celui qui ne veut ...
生成字符串
sentences = '\n'.join(df['French'].tolist())
生成字数
counts = freq_dist(sentences, 'french')
按字母顺序显示
results = sorted(counts.most_common(),
key=lambda x: x[0])
for k, v in results:
print(k, v)
a 5
aim 2
appartamento 2
aucun 1
avanc 1
cas 1
celui 1
centro 1
chacun 1
comprato 1
court 1
cris 1
deux 1
entendr 1
fait 2
faut 1
fois 1
guer 1
ha 1
hab 1
ho 1
il 3
immobiliar 1
in 2
l 1
lievr 1
mercato 1
mid 1
mieux 1
moin 1
nid 1
oiseau 1
pet 2
plus 1
port 1
prend 1
préven 1
quand 1
quant 1
qui 3
recul 1
sourd 1
stupendo 1
tu 1
tuo 1
van 1
vaut 1
verr 1
veut 1
vivr 1
voit 1
è 2