Как нанести TF-IDF на мои луки после генерации частот - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю над сходством документов с помощью WordNet, хотя я не знаю, как применить взвешивание IDF на этом этапе в моем коде.Я уверен, что это взвешивание - одна из самых простых вещей, но вся информация онлайн кажется довольно запутанной.Я пытаюсь добраться до точки, где я могу использовать косинусное сходство, хотя я потерян в данный момент, любая помощь приветствуется.Я собрал 2 корпуса в отдельные пакеты и посчитал частоты, так что часть TF завершена?

def make_bow(somestring):
    rep=word_tokenize(somestring)
    rep=normalise(rep) 
    rep=stem(rep)  
    rep=filter_stopwords(rep) 
    dict_rep={}
    for token in rep:
        dict_rep[token]=dict_rep.get(token,0)+1 
    return(dict_rep)

wsj=WSJCorpusReader()
rcr=ReutersCorpusReader()

collectionsize=50
collections={"wsj":[],"rcr":[]}

for key in collections.keys():
    if key=="wsj":
        generator=wsj.raw()
    else:
        generator=rcr.raw()
    while len(collections[key])<collectionsize:
        collections[key].append(next(generator))

bow_collections={key:[make_bow(doc) for doc in collection] for key,collection in collections.items()}
print(bow_collections)

В итоге получается печать:

{'wsj': [{'pierre': 1, 'vinken': 1, 'NUM': 2, 'year': 1, 'old': 1, 'join':         
1, 'board': 1, 'nonexecutive': 1, 'director': 1}, {'vinken': 1, 'chairman': 
1, 'elsevier': 1, 'dutch': 1, 'publishing': 1, 'group': 1}, {'rudolph': 1, 
'agnew': 1, 'NUM': 1, 'year': 1, 'old': 1, 'former': 1, 'chairman': 1, 
'consolidated': 1, 'gold': 1, 'field': 1, 'plc': 1, 'wa': 1, 'named': 1, 
'nonexecutive': 1, 'director': 1, 'british': 1, ......
...