我正在尝试计算我正在编译的斯瓦希里语语料库的频率分析。目前,这就是我所拥有的:
import os
import sys
from collections import Counter
import re
path = 'C:\Python27\corpus\\'
cnt = Counter()
listing = os.listdir(path)
for infile in listing:
print "Currently parsing: " + path + infile
corpus = open(path+infile, "r")
for lines in corpus:
for words in lines.split(' '):
if len(words) >= 2 and re.match("^[A-Za-z]*$", words):
words = words.strip()
cnt[words] += 1
print "Completed parsing: " + path + infile
#output = open(n + ".out", "w")
#print "current file is: " + infile
corpus.close()
#output.close()
for (counter, content) in enumerate(cnt.most_common(1000)):
print str(counter+1) + " " + str(content)
因此,该程序将迭代给定路径中的所有文件,读入每个文件的文本,并显示1000个最常用的单词。这就是问题:斯瓦希里语是一种凝聚性语言,意味着将词缀,后缀和前缀添加到单词中以传达诸如时态,因果关系,虚拟语气,介词等内容。
所以像'-fanya'这样的动词词根就意味着'做'可以成为一个人 - “我会做你的。” 结果,该频率列表偏向于连接诸如“for”,“in”,“out”之类的不使用所述中缀的单词。
是否有一种简单的方式来查看像'nitakufanya'或'tunafanya'这样的词,并在计数总数中加入'fanya'这个词?
要看一些潜在的事情:
由于
答案 0 :(得分:0)
首先进行频率分析而不必担心前缀。然后修复频率列表中的前缀。为此,可以根据单词对列表进行排序,以使具有相同前缀的单词彼此相邻。这将使手工修剪变得非常容易。
答案 1 :(得分:0)
你可以这样做:
root_words = [re.sub(
'^(ni|u|a|wa|tu|m)(na|li|ta|ji|nge)',
'', x) for word in words]
从每个单词中删除前缀,但如果根单词也以这些顺序开头,那么你可以做的很多。