Как я могу найти и распечатать несоответствующие / несходные слова из документов? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь переписать алгоритм, который в основном принимает входной текстовый файл и сравнивает различные документы и приводит к сходству.

Теперь я хочу напечатать вывод несопоставленных слов и вывести новый текстиль с несопоставленными словами.

Исходя из этого кода, "hello force" является входным параметром и проверяется на соответствие raw_documents и выводит ранг для сопоставленного документа в диапазоне от 0 до 1 (слово "force" сопоставляется со вторым документом, а выходное значение дает больший ранг дляВторой документ, но "привет", отсутствует в любом raw_document. Я хочу напечатать несоответствующее слово "привет", если оно не соответствует), но я хочу напечатать несоответствующее входное слово, которое не было сопоставлено ни с одним из raw_document

import gensim
import nltk

from nltk.tokenize import word_tokenize

raw_documents = ["I'm taking the show on the road",
                 "My socks are a force multiplier.",
             "I am the barber who cuts everyone's hair who doesn't 
cut their own.",
             "Legend has it that the mind is a mad monkey.",
            "I make my own fun."]

gen_docs = [[w.lower() for w in word_tokenize(text)]
            for text in raw_documents]

dictionary = gensim.corpora.Dictionary(gen_docs)

corpus = [dictionary.doc2bow(gen_doc) for gen_doc in gen_docs]

tf_idf = gensim.models.TfidfModel(corpus)
s = 0
for i in corpus:
    s += len(i)
sims =gensim.similarities.Similarity('/usr/workdir/',tf_idf[corpus],
                                  num_features=len(dictionary))
query_doc = [w.lower() for w in word_tokenize("hello force")]

query_doc_bow = dictionary.doc2bow(query_doc)

query_doc_tf_idf = tf_idf[query_doc_bow]
result = sims[query_doc_tf_idf] 
print result

1 Ответ

0 голосов
/ 11 февраля 2019

Если вы просто хотите знать, что слово 'hello' отсутствует в некоторых других документах, для этого может даже не потребоваться вспомогательная библиотека на естественном языке, такая как gensim.Вы могли бы просто вести учет всех увиденных слов - и для этого должно быть достаточно простого Python dict или set или Counter.(После загрузки его со всеми словами просто проверяйте каждое слово вашего нового текста по очереди.)

Сравнение TfidfModel и Similarity Генсима на самом деле.имеет дело с более тонкими относительными степенями сравнения (не «да / нет» присутствия слова).

И метод gensim.corpora.Dictionary.doc2bow() обычно игнорирует слова, неизвестные словарю, - потому что у них нет назначенных слотов, и, следовательно, они, возможно, редки / не важны - скорее, чемвключить их в возвращенные данные.Таким образом, представления «мешка слов», которые он возвращает по умолчанию, которые по сути являются списками (known_word_index, count), не могут помочь в простом, еще не замеченном обнаружении еще не известных слов.

Однако вы можете посмотреть на его необязательный параметр return_missing и запросить return_missing=True.Затем он возвращает кортеж (bag_of_words, dict_of_missing_words) - и, посмотрев на это второе возвращаемое значение, посмотрите, какие слова не были уже в объекте gensim.corpora.Dictionary.См .:

https://radimrehurek.com/gensim/corpora/dictionary.html#gensim.corpora.dictionary.Dictionary.doc2bow

...