我有两个单独的文本文件中包含两个频率列表,如下所示:
list2.txt
325 de
309 het
308 is
289 een
258 ik
208 rt
207 op
192 :
189 van
186 met
178 echt
167 en
160 in
150 dat
list2.txt
528 het
471 ik
466 een
445 de
426 is
350 dat
308 niet
273 van
239 en
227 wat
215 die
199 je
193 met
188 op
180 in
166 te
155 voor
选项1: 我正在寻找一种方法,最好是python,在以下数据上执行以下等式。 这是我试图实现的公式:
Pm(w) = relative frequency of word/token 'w' in list1
Pv(w) = relative frequency of word/token 'w' in list2
variance = sqrt (Pm(w) / Nm + Pv(w) / Nv)
t = ( Pm(w) - Pv(w)) / variance
有人可以帮我写一个为我做这个的程序/功能。即,它将两个文本文件作为输入,并为每个单词/令牌生成t值。我很失落,这似乎永远把我带走了。
输出:带有t检验值和单词的新文档。
OPTION2: 我也在寻找一种为我提供比率的方法。
输入:(list1.txt和list2.txt)
输出:(list1-ratio.txt)
325 de 445 de 0.7:1
289 een 466 een 0.6:1
输出:(list2-ratio.txt)
445 de 325 de 1.3:1
466 een 289 een 1.6:1
有没有人可以帮助我这个,最好的情况是使用两个选项,所以我可以比较数据。这不是家庭作业,我致力于情感分析。
感谢名单
答案 0 :(得分:1)
以下是使用ttest_rel
中的scipy.stats
的示例。这对来自两个样本的相关数据执行t检验。为了进行这样的测试,对于不在列表中的所有单词假定计数为0(例如,“die”在list2中,但不在list1中,因此list1中的die计数为0)。
from scipy.stats import ttest_rel
def input_file_to_dict(f):
return dict((key, int(value)) for value, key in map(lambda line:line.split(), f))
with open("16892486/list1.txt") as f:
word_counts1 = input_file_to_dict(f)
with open("16892486/list2.txt") as f:
word_counts2 = input_file_to_dict(f)
#find all words that are in list1 and in list2
common_words = set.intersection(set(word_counts1.keys()), set(word_counts2.keys()))
t,p = ttest_rel([word_counts1[k] for k in common_words],
[word_counts2[k] for k in common_words])
对于需求二,我们可以简单地计算出我们需要的结果并将其写入文件:
with open("16892486/list1-ratio.txt","w") as f_out:
for word, count1, count2 in zip(all_words, counts1, counts2):
ratio = float(count1) / count2 if count2>0 else np.inf
print >>f_out, count1, word, count2, word, "%.2f:1" % ratio
文件中的输出是:
192 : 0 : inf:1
150 dat 350 dat 0.43:1
325 de 445 de 0.73:1
0 die 215 die 0.00:1
178 echt 0 echt inf:1
289 een 466 een 0.62:1
167 en 239 en 0.70:1
309 het 528 het 0.59:1
258 ik 471 ik 0.55:1
160 in 180 in 0.89:1
308 is 426 is 0.72:1
0 je 199 je 0.00:1
186 met 193 met 0.96:1
0 niet 308 niet 0.00:1
207 op 188 op 1.10:1
208 rt 0 rt inf:1
0 te 166 te 0.00:1
189 van 273 van 0.69:1
0 voor 155 voor 0.00:1
0 wat 227 wat 0.00:1
注意: