Инструмент Python для поиска значимых пар слов в документе - PullRequest
0 голосов
/ 10 октября 2018

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

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

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

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

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()

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

0 голосов
/ 10 октября 2018

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

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

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

0 голосов
/ 10 октября 2018

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

Давайте возьмем такой подход, что мы ничего не знаем о составных словах в английском, будь то «знак остановки» столь же значимо отличается от «стопа» и«знак» как «лучше» от «делает» и «лучше»

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...