我想在Python中编写一个脚本,它以file.txt作为输入,并返回一个按其频率排序的单词列表。 我的问题是我的文字是用法语写的,因此有些像“préchauffer”这样的单词在我的下面的脚本(见下文)中很奇怪,而且这有问题。
from collections import Counter
import re
from re import split
import io
def format_print(counter):
lst = counter.items()
lst.sort(key=lambda (a, b): (b, a))
for word, count in lst:
print "%-16s | %16d" % (word, count)
def count_words(filename):
stop_words = frozenset(['le', 'la', 'des', 'et', 'des', 'dans', 'les', 'de', 'une', 'un',
'se', 'sa'])
text = io.open(filename, 'r', encoding='utf8').read()
words = re.findall(r'\w+', text)
cap_words = [word.upper() for word in words if word not in stop_words and len(word) > 1]
word_counts = Counter(cap_words)
return word_counts
format_print(count_words("extract.txt"))
删除我的file.txt中的所有重音都没问题,但我还没有找到办法。 非常感谢您的帮助
示例文字
étourdi, etourdi, étourdi, préchauffer
上述文字的结果:
CHAUFFER | 1
ETOURDI | 1
PR | 1
TOURDI | 2
我的预期结果 (此处为了简洁而未格式化)将是
ÉTOURDI 2, ETOURDI 1, PRÉCHAUFFER 1
(实际上,多亏了Burhan Khalid评论,“salé”和“sale”有不同的含义,区分它们会很有用)ETOURDI 3, PRECHAUFFER 1
答案 0 :(得分:4)
如果你想标准化强调的字符串(例如:étourdi和etourdi),你可以使用非常好的unidecode模块。
示例:
text = u'étourdi, etourdi, étourdi, préchauffer'
words = re.findall(r'\w+', text, re.U)
cap_words = [unidecode.unidecode(word).upper() for word in words]