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

NLTK Revisited

NLTK Revisited: почему, когда вы начнете работать с проектом текстового анализа, рано или поздно … Теги с NLP, NLTK, текстом, Python.

NLTK Revisited: почему

Когда вы начнете работать с проектом по текстовому анализу, рано или поздно вы столкнулись с следующей проблемой: где найти образец текста, как получить ресурсы, где я должен начать. Когда я Сначала был контакт (Prop Language Post) С NLP я не оценил силу, которая лежит за NLTK – библиотекой первого выбора Python для NLP. Однако через несколько лет я вижу, что я мог бы использовать его раньше. Почему? NLTK поставляется с легким доступом к различным источникам текста. И я собираюсь показать вам, что особенно мне нравится и то, что привлекло мое внимание при изучении первых 3 глав Официальная книга Отказ

Но главное дело – это то, что? Я хотел бы (наконец) построить некоторые Предложение инструмента Это позволит дать некоторым виртуальным помощником помочь в процессе принятия решений.

Доступно в комплектных ресурсах

Браун и его категории

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

import nltk
nltk.download('brown')
files = nltk.corpus.brown.fileids()
print(f"'Brown' corpus contain {len(files)} files")


[nltk_data] Downloading package brown to /root/nltk_data...
[nltk_data] Unzipping corpora/brown.zip.
'Brown' corpus contain 500 files

В этом корпусе вы найдете другой текст, классифицированный на категории. Так что это красиво вписывается в область классификации машинного обучения. После того, как есть категории этих текстов вместе с некоторыми образцами.

print("'brown' contains following categories %s" % nltk.corpus.brown.categories())
brown_adventure = nltk.corpus.brown.sents(categories='adventure')[0:5]
brown_government = nltk.corpus.brown.sents(categories='government')[0:5]
print("Following we have some sentences from 'adventure' category:")
for sent in brown_adventure:
  print(" > "+ " ".join(sent))
print("And here we have some sentences from 'government' category:")
for sent in brown_government:
  print(" > "+ " ".join(sent)) 


'brown' contains following categories ['adventure', 'belles_lettres', 'editorial', 'fiction', 'government', 'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance', 'science_fiction']
Following we have some sentences from 'adventure' category:
 > Dan Morgan told himself he would forget Ann Turner .
 > He was well rid of her .
 > He certainly didn't want a wife who was fickle as Ann .
 > If he had married her , he'd have been asking for trouble .
 > But all of this was rationalization .
And here we have some sentences from 'government' category:
 > The Office of Business Economics ( OBE ) of the U.S. Department of Commerce provides basic measures of the national economy and current analysis of short-run changes in the economic situation and business outlook .
 > It develops and analyzes the national income , balance of international payments , and many other business indicators .
 > Such measures are essential to its job of presenting business and Government with the facts required to meet the objective of expanding business and improving the operation of the economy .
 > Contact
 > For further information contact Director , Office of Business Economics , U.S. Department of Commerce , Washington 25 , D.C. .

Есть очень важный компонент NLP в коричневый Корпус, а именно часть речевого метки (POS). Как это организовано? Давайте посмотрим на примере одного из предложений, напечатанных всего минут назад.

adv_words = nltk.corpus.brown.words(categories='adventure')
print(adv_words[:10])
adv_words = nltk.corpus.brown.tagged_words(categories='adventure')
print(adv_words[:10])


['Dan', 'Morgan', 'told', 'himself', 'he', 'would', 'forget', 'Ann', 'Turner', '.']
[('Dan', 'NP'), ('Morgan', 'NP'), ('told', 'VBD'), ('himself', 'PPL'), ('he', 'PPS'), ('would', 'MD'), ('forget', 'VB'), ('Ann', 'NP'), ('Turner', 'NP'), ('.', '.')]

Да! Он отмечен и готов к анализу. Что означают эти символы? Они являются символами частей речи, красиво описаны Здесь Отказ Честь NP стоит Имя собственное и VBD это Глагол, прошедшее время Отказ

настроения

Одной из областей, где используется НЛП, является анализ настроений, играющий важную роль в цифровом маркетинге. Представьте, насколько приятно обрабатывать огромное количество мнений и мгновенно признать, утверждается ли продукт или отклонен сообществом. Увидение тенденций также возможно с этим. Так что же один из объединенных инструментов NLKT, чтобы иметь дело с чувствами? Это мнение_лексикон

from nltk.corpus import opinion_lexicon
nltk.download('opinion_lexicon')
negatives = opinion_lexicon.negative()[:10]
positives = opinion_lexicon.positive()[:10]
print("If you find some negative words, here you are: %s" % negatives)
print("But let us try to see the positive side of life! Described with these words: %s" % positives)


[nltk_data] Downloading package opinion_lexicon to /root/nltk_data...
[nltk_data] Unzipping corpora/opinion_lexicon.zip.
If you find some negative words, here you are: ['2-faced', '2-faces', 'abnormal', 'abolish', 'abominable', 'abominably', 'abominate', 'abomination', 'abort', 'aborted']
But let us try to see the positive side of life! Described with these words: ['a+', 'abound', 'abounds', 'abundance', 'abundant', 'accessable', 'accessible', 'acclaim', 'acclaimed', 'acclamation']

и многое другое…

Там есть много других корпораций. Это не задача этого сообщения/ноутбука, чтобы повторить что-то, что можно прочитать его/сама в Официальные документы, как здесь Отказ С NLTK после загрузки некоторых материалов у вас есть доступ к таким материалам, как:

  • Многоязычная корпуса (например, _universal Declaration of Human Rights_with 300+ языков)
  • Лексические ресурсы ( Wordnet )
  • Произносимые словари ( Словарь произнесения CMU )

Много вещей, чтобы просматривать. Но стоит просто взглянуть на некоторые из них, чтобы это чувство: «Я где-то видел это …», когда столкнулся с некоторой задачей NLP.

Что угодно

Если прикрепленные ресурсы для вас недостаточно, просто начните использовать разные ресурсы.

Запросы

У Python есть библиотеки для чего угодно, поэтому это можно использовать доступные чистые ресурсы в вашем приложении, просто имея свой URL -адрес.

import requests
url = 'https://databricks.com/blog/2018/09/26/whats-new-for-apache-spark-on-kubernetes-in-the-upcoming-apache-spark-2-4-release.html'
resp = requests.get(url)
blog_text = resp.text
blog_text[:200]


'\r\n
\r\n\r\n\r\n 

RSS.

Готовы потреблять RSS? С Python ничего не проще. Вы можете создать экземпляр NLTK. Текст Наличие RSS -подачи в качестве ввода. Это фрагмент, как это можно сделать

!pip install feedparser
import feedparser
url = 'http://jvm-bloggers.com/pl/rss.xml'
d = feedparser.parse(url)
title = d['feed']['title']
entries = d['entries']
print("Look ma! I've just parsed RSS from a very nice Polish blogging platform. It has a title %s" % title)
print("And there we go with 5 exemplary entries:")
for entry in entries[:5]:
  print(' > ' + entry.title)


Collecting feedparser
Successfully built feedparser
Installing collected packages: feedparser
Successfully installed feedparser-5.2.1
Look ma! I've just parsed RSS from a very nice Polish blogging platform. It has a title JVMBloggers
And there we go with 5 exemplary entries:
 > Odpowiedź: 42
 > Thanks for explaining the behaviour of dynamic (partition overwrite) mode.
 > Non-blocking and async Micronaut - quick start (part 3)
 > Strefa VIP
 > Mikroserwisy – czy to dla mnie?

уборка

Когда ваш HTML DOC выясняется, у вас, вероятно, есть док, который полон HTML-беспорядка, и нет дополнительного значения наличия в вашем тексте. Таким образом, есть некоторые уборки, которые можно сделать, и есть инструменты, которые могут сделать это, но они не являются частью пакета NLTK. Итак, давайте будем красивыми в качестве примера.

from bs4 import BeautifulSoup
soup = BeautifulSoup(blog_text)
content = soup.find("div", {'class':"blog-content"})
text_without_markup = content.get_text()[:100]
text_without_markup


'\n\n\nWhat's New for Apache Spark on Kubernetes in the Upcoming Apache Spark 2.4 Release\n\n\nSeptember 26'

Нормализация - Языки не легко

Ваш язык не легко. Если вы польские, как я, это оооочень верно. Но даже английский и другие европейские языки добавляют сложность в NLP. Почему? Слова имеют разные формы, и мы должны соответствовать правилам грамматики, которые будут уважены при анализе текста машиной. Взять английский собирается Слово в качестве примера, вы имеете в виду идти глагол, но есть также его лемма -Ном Это должно быть признано и пропущено на момент анализа. Каковы 3 процесса, которые имеют встроенную поддержку в NLTK? Прочитайте следующее.

Токенизация

Текст состоит из предложений, и они содержат слова. Часто мы хотели бы, чтобы слова были представлены как векторы, так как мы будем применять некоторую алгебру к этому. Самый простой подход токенизации может быть реализован следующим образом, однако есть некоторые ограничения. Вы можете использовать различные Tokenizers Доступно в NLTK.Tokedize упаковка .

# write tokenizer yourself?
import re
text = "Two smart coders are coding very quickly. Why? The end of the sprint is coming! The code has to be finished!"
tokens_manual = re.split(r"[\s+]", text)
print("Tokens taken manually %s " % tokens_manual)

# or maybe choose the one from the abundance in `nltk`
import nltk
from nltk.data import load
from nltk.tokenize.casual import (TweetTokenizer, casual_tokenize)
from nltk.tokenize.mwe import MWETokenizer
from nltk.tokenize.punkt import PunktSentenceTokenizer
from nltk.tokenize.regexp import (RegexpTokenizer, WhitespaceTokenizer,
                                    BlanklineTokenizer, WordPunctTokenizer,
                                    wordpunct_tokenize, regexp_tokenize,
                                    blankline_tokenize)
from nltk.tokenize.repp import ReppTokenizer
from nltk.tokenize.sexpr import SExprTokenizer, sexpr_tokenize
from nltk.tokenize.simple import (SpaceTokenizer, TabTokenizer, LineTokenizer,
                                    line_tokenize)
from nltk.tokenize.texttiling import TextTilingTokenizer
from nltk.tokenize.toktok import ToktokTokenizer
from nltk.tokenize.treebank import TreebankWordTokenizer
from nltk.tokenize.util import string_span_tokenize, regexp_span_tokenize
from nltk.tokenize.stanford_segmenter import StanfordSegmenter
from nltk.tokenize import word_tokenize

nltk.download('punkt')
tokens = word_tokenize(text)
print(tokens)


Tokens taken manually ['Two', 'smart', 'coders', 'are', 'coding', 'very', 'quickly.', 'Why?', 'The', 'end', 'of', 'the', 'sprint', 'is', 'coming!', 'The', 'code', 'has', 'to', 'be', 'finished!'] 
[nltk_data] Downloading package punkt to /root/nltk_data...
[nltk_data] Unzipping tokenizers/punkt.zip.
['Two', 'smart', 'coders', 'are', 'coding', 'very', 'quickly', '.', 'Why', '?', 'The', 'end', 'of', 'the', 'sprint', 'is', 'coming', '!', 'The', 'code', 'has', 'to', 'be', 'finished', '!']

Stemming

Итак, одна из задач, которые можно сделать, это stemming Так что избавиться от слов, заканчивающихся. Давайте посмотрим, что делает популярный stemmer делает с текстом, который мы уже токелизовались раньше.

porter = nltk.PorterStemmer()
tokens_stemmed = [porter.stem(token) for token in tokens]
print(tokens_stemmed)


['two', 'smart', 'coder', 'are', 'code', 'veri', 'quickli', '.', 'whi', '?', 'the', 'end', 'of', 'the', 'sprint', 'is', 'come', '!', 'the', 'code', 'ha', 'to', 'be', 'finish', '!']

Лемматизация

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

nltk.download('wordnet')
wnl = nltk.WordNetLemmatizer()
lemmas = [wnl.lemmatize(token) for token in tokens]
print(lemmas)


[nltk_data] Downloading package wordnet to /root/nltk_data...
[nltk_data] Unzipping corpora/wordnet.zip.
['Two', 'smart', 'coder', 'are', 'coding', 'very', 'quickly', '.', 'Why', '?', 'The', 'end', 'of', 'the', 'sprint', 'is', 'coming', '!', 'The', 'code', 'ha', 'to', 'be', 'finished', '!']

Резюме

Так куда мы пошли? Я только что анализировал книгу NLKT в Интернете, главы № 2 и 3. Я попробовал несколько инструментов из большого числа, доступных в этом инструменте естественного языка. Теперь есть время, чтобы исследовать другие главы там. Быть в курсе. Я должен построить мой Предложение инструмент Отказ

Все это было создано как ноутбук Jupyter.

Оригинал: “https://dev.to/lukaszkuczynski/nltk-revisited-13ea”