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\nRSS.
Готовы потреблять 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”