python - 有什么方法可以找到两个语料库之间的相似性吗?
问题描述
我想测量两个语料库的相似性。到目前为止,我尝试过的相似性检查如下:
- 杰卡德相似度
- 骰子系数
- Spearman 等级相关系数
- Chi2测试
关于Spearman的秩相关系数,代码如下;
def Spearman_rank_correlation_coefficient(another_word_freq_dict):
num = 5120
main_freq = list(min_word_freq_dict.keys())[:num]
df_freq = list(another_word_freq_dict.keys())[:num]
spearmen = []
for i,word in enumerate(main_freq):
i = i+1
try:
j = df_freq.index(word)+1
spearmen.append((i-j)**2)
except ValueError:
j = num+1
spearmen.append((i-j)**2)
val = sum(spearmen)
return 1 - (6*val)/(num**3 - num)
在这里,我从主语料库和另一个语料库中选取了前 5120 个最常用的词。我的问题在除了 ValueError 的行下方,我将 5121 指定为在另一个语料库前 5120 词频列表中找不到的词的排名。当主语料库中的一个词在斯皮尔曼的等级相关系数中没有在另一个语料库中找到时,这是正确的处理程序吗?
关于适合度良好的 Chi_2 测试,我编写了以下代码;
def chi2_test(another_word_freq_dict):
num_words = 3000
N1 = sum(main_word_freq_dict.values())
main_ = dict([(key,val/N1) for key,val in main_word_freq_dict.items()])
main_dict = dict([(k,main_[k]) for k in list(main_.keys())[:num_words]])
another_dict = dict([(k,another_word_freq_dict[k]) for k in list(another_word_freq_dict.keys())[:num_words]])
N_words = sum(another_dict.values()) #number of words appeared in another corpus
N_unique_words = len(another_dict) # number of tokens in another corpus
chi = []
for word,expected in main_dict.items():
try:
observed = (another_dict[word]+1)/(N_words+N_unique_words) #laplace add-one smoothing
except KeyError: #if a word in main is not in another courpus
observed = 1/(N_words+N_unique_words)
val = (expected - observed)**2/expected
chi.append(val)
return sum(chi)
我的第二个问题是我的 chi2 功能测试代码是否有意义?
对于第三个问题,是否有任何方法可以计算两个语料库之间的相似度,而不是单词或句子?
解决方案
您首先需要决定如何定义两个文本之间的相似性。这应该是
- 以相似频率使用的相同词
- 相似的词以相似的顺序
- 词汇上的一般重叠
- 文本之间没有共享的单词很少
- 在相同上下文中使用的词
- 多词序列的重叠(n-gram)
- ...
有不同的方法来定义相似性,在你知道你在寻找什么之前,提出指标是没有意义的。文本之间的“相似性”并不是一个绝对的、客观的概念。
推荐阅读
- c++ - 我的图书馆程序有问题
- javascript - 复制多次重复PID-3到PID-4
- python - 我正在尝试使用 python 和 BeautifulSoup 对 ebay 进行网络抓取,但我得到的列表索引超出范围错误
- c++ - 如何在 Godot 中调试本机库的运行时错误?
- python - 从python中的外部函数访问类内的变量
- java - 如何返回空或 null 而不是抛出异常
- flutter - 如何在颤动中制作具有不同图像高度的交错网格视图?
- elasticsearch - 至少一次保证弹性搜索接收器
- bash - 编译 FARGO-ADSG
- angular - 重新登录后的离子应用程序问题(离子按钮除外)