WedX - журнал о программировании и компьютерных науках

Рассчитать вероятность совпадения ключевых слов в моем текстовом файле

У меня есть два текстовых файла, первый содержит одно предложение в каждой строке, а второй содержит одно ключевое слово в каждой строке, например:

Firstword
Secondword
Thirdword
...

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

Вот что я сделал:

from nltk.collocations import BigramCollocationFinder, BigramAssocMeasures
from nltk.corpus import stopwords
import string
from collections import Counter
import re

with open("./keywords.txt", encoding='utf8') as thebook:
    keywords = set(word.lower().strip(string.punctuation) for word in thebook.read().split())
words = re.findall(r'\w+', open('sentence_file.txt').read().lower())
if words in keywords : 
    finder = BigramCollocationFinder.from_words(words)
    bgm = BigramAssocMeasures()
    score = bgm.pmi
    collocations = {'_'.join(bigram): pmi for bigram, pmi in finder.score_ngrams(score)}

collocations

Это дает мне следующую ошибку:

---> 12 if words in keywords :
     13     finder = BigramCollocationFinder.from_words(words)
     14     bgm = BigramAssocMeasures()

TypeError: unhashable type: 'list''

Обратите внимание, что программа работала нормально, когда я тестировал ее на одном предложении и pmi между ее собственными словами. У меня больше проблем с добавлением двух файлов. Любая помощь?

06.07.2020

  • Если вы пытаетесь проверить, есть ли какое-либо слово в words в keywords, вы можете преобразовать words в набор и проверить их пересечение: if set(words) & keywords: docs.python.org/3/library/stdtypes.html#set-types-set-frozenset 06.07.2020
  • слова - это список. Вы должны использовать строку в списке. Вы можете использовать слова [0] или повторять его. 06.07.2020

Ответы:


1

Ваш words представляет собой list строк из совпадений регулярных выражений. Keywords, тем временем, является set. В Python вы не можете сделать set из списка списков, потому что lists нельзя хэшировать. Поэтому, когда вы пытаетесь найти свой list в set, вы получаете следующую ошибку:

TypeError: unhashable type: 'list'

В вашем случае вы можете либо перебрать words, либо проверить их наличие в keywords. Или наоборот, в зависимости от размера списка и конечной цели:

for word in words:
    if word in keywords:
        # do something
        break # potentially break your loop if you only need to find one match

or

for kword in keywords:
    if kword in words:
        # do something
        break # potentially break your loop if you only need to find one match

Или вы можете проверить пересечение words и keywords, как предложил один из комментаторов.

07.07.2020
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]