Рубрики
Без рубрики

Построить быстрый подводчик с Python и NLTK

Используйте библиотечный люкс NLTK для создания текстового шоссе в Python. Теги с Python, NLP, Dataanalytics, обучением.

Если вы заинтересованы в аналитике данных, вы найдете участие о обработке естественного языка очень полезной. Хороший проект, чтобы начать узнать о NLP – это написать суммирователь – алгоритм для уменьшения тел текста, но сохраняя свое первоначальное значение или оказывать большое понимание оригинального текста.

Есть много библиотек для NLP. Для этого проекта мы будем использовать NLTK – инструментарий натурального языка.

Давайте начнем с написания шагов, необходимых для создания нашего проекта.

4 шага, чтобы построить суммар

  1. Удалить стоп слова (определенные ниже) для анализа
  2. Создание частотной таблицы слов – сколько раз каждое слово появляется в тексте
  3. Назначить оценку каждому предложению в зависимости от слов, которые он содержит и Частота таблицы
  4. Создать резюме, добавив каждое предложение над определенным порогом оценки

Вот и все! И реализация Python также короткая и простая.

Что стопорные слова?

Любое слово, которое не добавляет значения к значению предложения. Например, скажем, у нас есть предложение

Группа людей бежит каждый день из банка в Алафайе до ближайшего чипоты

Удаление слов «Стоп предложения», мы можем сузить количество слов и сохранить значение:

Группа людей бежит каждый день из банка Алафайя до ближайшего чипоты

Мы обычно удаляем стоп слова из анализируемого текста, как зная, что их частота не дает никакого понимания для тела текста. В этом примере мы удалили экземпляры слов А , в и Отказ

Теперь давайте начнем!

Существует два библиотеки NLTK, которые будут необходимы для построения эффективного свода.

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize, sent_tokenize

Примечание: Есть больше библиотек, которые могут сделать наш суммирователь лучше, один пример обсуждается в конце этой статьи.

Корпус

Корпус означает набрать текст. Это может быть наборы данных стихов определенным поэтом, органами работы определенным автором и т. Д. В этом случае мы собираемся использовать набор данных заранее определенных слов стоп.

Токенизаторы

По сути, он разделяет текст в серию токенов. Есть три основных токенизатора – слово, предложение и регеекс токена. Для этого конкретного проекта мы будем использовать только слово и предложение Tokenizer.

Удаление стоп-слов и создание стола

Во-первых, мы создаем два массива – один для стоп-слов и один для каждого слова в теле текста.

Давайте использовать текст как исходное тело текста.

stopWords = set(stopwords.words("english"))
words = word_tokenize(text)

Во-вторых, мы создаем словарь для таблицы частоты слова. Для этого мы должны использовать только слова, которые не являются частью массива StopWords.

freqTable = dict()
for word in words:
    word = word.lower()
    if word in stopWords:
        continue
    if word in freqTable:
        freqTable[word] += 1
    else:
        freqTable[word] = 1

Теперь мы можем использовать Freqtable Словарь по каждому предложению, чтобы узнать, какие предложения имеют наиболее актуальную информацию для общей цели текста.

Присвоение оценки на каждое предложение

У нас уже есть предложение Tokenizer, поэтому нам просто нужно запустить sent_tokedize () Способ создания массива предложений. Во-вторых, нам понадобится словарь, чтобы сохранить счет каждого предложения, таким образом, мы можем позже пройти через словарь для создания резюме.

sentences = sent_tokenize(text)
sentenceValue = dict()

Теперь пришло время пройти через каждое предложение и дать ему счет в зависимости от слов, которые у него есть. Есть много алгоритмов, чтобы сделать это – в основном, любой постоянный способ забить предложение по его словам. Я пошел на базовый алгоритм: добавление частоты каждого не остановка слова в предложении.

for sentence in sentences:
    for wordValue in freqTable:
        if wordValue[0] in sentence.lower():
            if sentence[:12] in sentenceValue:
                sentenceValue[sentence[:12]] += wordValue[1]
            else:
                sentenceValue[sentence[:12]] = wordValue[1]

Примечание: Индекс 0 из WordValue вернет само слово. Индекс 1 Количество экземпляров.

Если предложение [: 12] поймал твой глаз, приятный улов. Это просто простой способ хвости для каждого предложения в словаре.

Обратите внимание, что потенциальная проблема с нашим алгоритмом баллов в том, что длительные предложения будут иметь преимущество в короткие предложения. Чтобы решить это, разделите каждое набранное предложение по количеству слов в предложении.

Итак, какое значение мы можем использовать для сравнения наших оценок?

Простой подход к этому вопросу – найти средний показатель предложения. Оттуда поиск порога будет легким крестическим лимонным скважином.

sumValues = 0
for sentence in sentenceValue:
    sumValues += sentenceValue[sentence]

# Average value of a sentence from original text
average = int(sumValues/ len(sentenceValue))

Итак, каков хороший порог? Неправильное значение может дать резюме, которое слишком мало/большой.

Среднее сам может быть хорошим порогом. Для моего проекта я решил пойти на более короткое резюме, поэтому порог, который я использую для этого, – это в полтора раза в среднем.

Теперь давайте применим наш порог и хранит наши предложения в порядке на наше резюме.

summary = ''
for sentence in sentences:
        if sentence[:12] in sentenceValue and sentenceValue[sentence[:12]] > (1.5 * average):
            summary +=  " " + sentence

Ты сделал это!! Вы можете сейчас Печать (сводка) И вы увидите, насколько хорош наша сводная информация.

Дополнительное улучшение: сделать Умные Частовые таблицы слова

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

Для реализации stemmer мы можем использовать библиотеку NLTK stemmers. Вы заметите, что есть много stemmers, каждый из них – другой алгоритм, чтобы найти корневое слово, и один алгоритм может быть лучше, чем другой для конкретных сценариев.

from nltk.stem import PorterStemmer
ps = PorterStemmer()

Тогда пропустите каждое слово у stemmer, прежде чем добавлять его к нашему Freqtable Отказ Важно стебель каждое слово при прохождении каждого предложения, прежде чем добавлять счет в нем счет.

И мы закончили!

Поздравляю! Дайте мне знать, если у вас есть другие вопросы или улучшения к этому подсугумому.

Спасибо за чтение моей первой статьи! Волны позитива

Оригинал: “https://dev.to/davidisrawi/build-a-quick-summarizer-with-python-and-nltk”