Инструмент Python для поиска значимых пар слов в документе

Я пишу программу, которая собирает твиты из Twitter и оценивает текст, чтобы найти актуальные темы. Я планирую использовать NLTK для ограничения условий и выполнения некоторых других операций с данными.

Мне нужен инструмент, который может определить, следует ли рассматривать два смежных слова в твите как один термин. Например, если в Твиттере появляются "поддельные новости", я не хочу относиться к этим двум словам как к разным. Другой пример: если все пишут в Твиттере о "компьютерных науках", не имеет смысла рассматривать компьютер и науку как два разных термина, поскольку они относятся к одной и той же теме. Существует ли инструмент, который может найти такие термины?

3 ответа

То, что вам нужно, это набор данных, называемый "би-грамм", который даст вам оценку того, как часто данная пара слов встречается вместе (то есть частота) в данном языке. Чем выше частота, тем больше вероятность, что пара является термином.

Например, посмотрите на COCA для поиска и загрузки корпуса. У Google есть подобный набор данных. Есть 3 грамма и 4 грамма, обычно называемые н-граммами.

В наборе данных COCA информатика имеет рейтинг частоты 1604; у поддельных новостей 828, а у apple car - 2. Поэтому вам нужно выбрать пороговую частоту, чтобы принять пару в качестве термина.

Вы можете определить набор специальных комбинаций и предварительно обработать вашу фразу перед токенизацией:

import nltk

def preprocess_text(original_text):
    specials = {"computer vision": "computer_vision",
                "fake news": "fake_news"}
    out = original_text.lower()
    for k in specials:
        out = out.replace(k, specials[k])
    return out

def main():
    txt = preprocess_text("Computer vision has nothing to do wiht fake news")
    tokens = nltk.word_tokenize(txt)
    nltk.FreqDist(tokens).tabulate()


if __name__ == "__main__":
    main()

Хотя было бы лучше иметь специализированную токенизацию.

Интересная проблема для игры, если предположить, что лексикона значимых сложных слов, которые вы могли бы использовать, уже нет. И я бы хотел видеть "информатику" в качестве актуальной темы.

Давайте рассмотрим тот подход, в котором мы ничего не знаем о составных словах в английском языке: "Стоп знак" так же значимо отличается от "стоп" и "знак", как "делает лучше" от "делает" и "лучше"

Разбивая его, вы хотите построить процесс, который:

  1. Определяет совмещенные пары
  2. Отбрасывает любые, которые явно не связаны как составные слова (то есть части речи, собственные имена или знаки препинания)
  3. Сохраняет пары кандидатов
  4. Анализирует пары кандидатов на частоту
  5. Обучает вашу систему искать наиболее ценные пары кандидатов

Это точное описание? Если это так, я думаю, что инструмент, который вы запрашиваете, будет в (4) или (5). Для 4) рассмотрим ассоциативное правило в библиотеке Python Orange как начало. Вы также можете использовать TF-IDF из scikit-learn. Для 5) вы можете выставить вывод из 4) в виде списка, набора или словаря строк со счетчиками.

Другие вопросы по тегам