Я бы хотел измерить сходство двух корпусов. До сих пор я проверял сходство:
- сходство Жакара
- коэффициент Кости
- коэффициент ранговой корреляции Спирмена
- критерий Chi2
в отношении рангового коэффициента корреляции Спирмена, код выглядит следующим образом:
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?
Что касается третьего вопроса, существует ли какой-либо метод для вычисления сходства между двумя корпусами, а не словами или предложениями?