Добро пожаловать в сообщество Tencent Cloud +, чтобы получить больше обширной технической практики Tencent по галантерее ~
Эта статья написанаБоярышники в сахареОпубликован вКолонка «Облако + сообщество»
представлять
Текст стал одной из самых распространенных форм выражения. Мы отправляем электронные письма, тексты, твиты, обновления статуса каждый день. В результате неструктурированные текстовые данные стали очень распространенными, и анализ больших объемов текстовых данных теперь является ключевым способом понять, что думают люди.
Твиты на Weibo помогают нам находить популярные темы новостей. Обзоры Taobao помогают пользователям покупать товары с самыми высокими рейтингами. Все эти примеры являются проявлением задач обработки естественного языка (NLP).
НЛП относится к области компьютерных наук, в основном для взаимодействия человека с компьютером. Методы НЛП используются для анализа текста, что дает компьютерам возможность понимать человеческий язык. Некоторые примеры приложений NLP включают автоматическое суммирование текста, разделение тем и анализ настроений.
В этом руководстве показано, как использовать Natural Language Toolkit (NLTK): инструмент НЛП для Python.
Подготовить
Во-первых, вы должны установить Python 3 и настроить локальную среду программирования на своем компьютере. Чтобы в полной мере воспользоваться этим учебным пособием, вы должны сначала ознакомиться с языком программирования Python, вы можете обратиться к Руководству по разработке Tencent Cloud.Документация по разработке Python на китайском языкеи использоватьСреда разработки Tencent Cloud PythonТестируйте прямо на машине.
Первый шаг, импорт NLTK
Прежде чем начать использовать Python, убедитесь, что модуль NLTK установлен. В командной строке проверьте NLTK, выполнив:
$ python -c "import nltk"
Если установлен NLTK, то команда завершится без ошибок. Теперь давайте удостоверимся, что у вас установлена последняя версия:
$ python -c "import nltk; print(nltk.__version__)"
Вам следует установить версию 3.2.1, так как мы будем использовать пакет NLTK Twitter, для которого требуется эта версия.
Если NLTK не установлен, вы получите сообщение об ошибке:
Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'nltk'
Сообщение об ошибке указывает, что NLTK не установлен, поэтому используйте pip для загрузки репозитория:
$ pip install nltk
Далее мы загрузим данные и инструменты NLTK, которые будем использовать в этом руководстве.
Второй шаг, загрузите данные NLTK и токенизатор.
В этом уроке мы будем использовать корпус Twitter, который можно загрузить через NLTK. В частности, мы будем использовать корпус twitter_samples NLTK. Давайте загрузим корпус через следующую командную строку:
$ python -m nltk.downloader twitter_samples
Если команда выполняется успешно, вы должны увидеть следующий вывод:
[nltk_data] Downloading package twitter_samples to
[nltk_data] /Users/sammy/nltk_data...
[nltk_data] Unzipping corpora/twitter_samples.zip.
Затем загрузите теггер POS.POS-тег— это процесс токенизации слов в тексте, чтобы они соответствовали определенным токенам POS: существительным, глаголам, прилагательным, наречиям и т. д. В этом руководстве мы будем использовать токенизатор среднего персептрона NLTK. Средний теггер персептрона использует алгоритм персептрона для прогнозирования тега POS, который, скорее всего, даст слово. Давайте загрузим токенизатор следующим образом:
$ python -m nltk.downloader averaged_perceptron_tagger
Если команда выполняется успешно, вы должны увидеть следующий вывод:
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data] /Users/sammy/nltk_data...
[nltk_data] Unzipping taggers/averaged_perceptron_tagger.zip.
Давайте еще раз проверим, правильно ли загружен корпус. В терминале откройте интерактивную среду Python:
$ python
В интерактивной среде Python импортируйте корпус twitter_samples:
>>> from nltk.corpus import twitter_samples
Твиттер-корпус NLTK в настоящее время содержит выборку из 20 000 твитов, полученных из Twitter Streaming API. Полные твиты хранятся в формате JSON с разделителями строк. Мы можем использовать twitter_samples.fileids(), чтобы увидеть, сколько файлов JSON существует в корпусе:
>>> twitter_samples.fileids()
Вывод будет выглядеть следующим образом:
[u'negative_tweets.json', u'positive_tweets.json',u'tweets.20150430-223406.json']
Используя эти идентификаторы файлов, мы можем вернуть строку твита:
>>> twitter_samples.strings('tweets.20150430-223406.json')
Запуск вернет много вывода. Обычно это выглядит так:
[u'RT @KirkKus: Indirect cost of the UK being in the EU is estimated to be costing Britain \xa3170 billion per year! #BetterOffOut #UKIP'...]
Теперь мы знаем, что наш корпус был успешно загружен. Итак, давайте воспользуемся сочетанием клавиш ctrl+D, чтобы выйти из интерактивной среды Python.
Теперь, когда у нас есть доступ к корпусу twitter_samples, мы можем приступить к написанию скриптов для обработки твитов.
Цель нашего скрипта — подсчитать количество вхождений прилагательных и существительных в подмножестве корпуса twitter_samples:
- имя существительное, по самому основному определению, обычно относится к человеку, месту или предмету. Например,Кино,книгиа такжегамбургерявляются существительными. Подсчет существительных может помочь определить, сколько тем обсуждается.
- **прилагательные, ** — слова, изменяющие существительное (или местоимение), например: aужасающийФильм,интереснокнига иливкусныйГамбургер. Подсчет прилагательных может определить, какой тип языка используется.
Вы можете расширить этот сценарий позже, чтобы подсчитывать положительные прилагательные (отличный,классно,счастливыйи т. д.) и отрицательные прилагательные (Скучный,Хромой,грустныйд.), которые можно использовать для анализа настроения твитов или отзывов о продуктах или фильмах. Данные, предоставляемые этим сценарием, в свою очередь, могут использоваться для принятия решений, связанных с этим продуктом или фильмом.
Мы начнем наш скрипт на следующем шаге.
Третий шаг – разделить предложение на слова.
Во-первых, в текстовом редакторе по вашему выбору создайте сценарий, который мы собираемся использовать, и назовите его nlp.py.
В нашем файле мы сначала импортируем файл corpus. Затем создайте переменную tweets и назначьте ее списку строк твитов из файла Positive_tweets.json.
nlp.py
from nltk.corpus import twitter_samples
tweets = twitter_samples.strings('positive_tweets.json')
Когда мы впервые загружаем список твитов, каждый твит представляется строкой. Прежде чем мы сможем определить, какие слова в твите являются прилагательными или существительными, нам сначала нужно токенизировать наш твит.
TokenizationЭто разложение ряда строк на слова, ключевые слова, фразы, символы и другие элементы, которые мы называем токенизацией. Давайте создадим новую переменную с именем tweets_tokens и назначим ей список токенизированных твитов:
nlp.py
from nltk.corpus import twitter_samples
tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
Эта новая переменная tweets_tokens представляет собой список, каждый элемент которого представляет собой список токенизированных токенов. Теперь, когда у нас есть токенизации для каждого твита, мы можем пометить эти токенизации соответствующими тегами POS.
Шаг 4: Отметьте предложения
Чтобы получить доступ к POS-тегеру NLTK, нам нужно его импортировать. Все операторы импорта должны находиться в начале скрипта. Давайте поместим этот новый импорт в другую импортную декларацию.
nlp.py
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
Теперь мы можем токенизировать каждый токен. NLTK позволяет нам сделать все это сразу, используя: pos_tag_sents(). Мы создадим новую переменную tweets_tagged для хранения списка тегов. Эту новую строку можно поместить прямо в конец нашего текущего скрипта:
tweets_tagged = pos_tag_sents(tweets_tokens)
Чтобы увидеть, как выглядит помеченный токен, это первый элемент в нашем списке tweets_tagged:
[(u'#FollowFriday', 'JJ'), (u'@France_Inte', 'NNP'), (u'@PKuchly57','NNP'),(u'@Milipol_Paris', 'NNP'), (u'for', 'IN'), (u'being', 'VBG'), (u'top', 'JJ'),(u'engaged', 'VBN'), (u'members', 'NNS'), (u'in', 'IN'), (u'my', 'PRP$'),(u'community', 'NN'), (u'this', 'DT'), (u'week', 'NN'), (u':)', 'NN')]
Мы видим, что наши твиты представлены в виде списка, и для каждого токена у нас есть информация о его POS-теге. Каждая пара токен/токен сохраняется как кортеж.
В НЛТК,имя прилагательноеАббревиатура ЖЖ.
Маркер NLTK маркерсуществительное в единственном числе(НН),существительное во множественном числе(ННС). Для простоты мы будем считать только существительные в единственном числе, отслеживая токены NN.
На следующем шаге мы подсчитаем, сколько раз JJ и NN появляются в нашем корпусе.
Пятый шаг, вычислить POS-тег
Мы будем использовать переменную-накопитель (счетчик), чтобы отслеживать количество вхождений JJ и NN, и будем добавлять эту переменную каждый раз, когда будет найден маркер. Сначала давайте создадим счетчик в нижней части скрипта, который мы сначала установим равным нулю.
nlp.py
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
JJ_count = 0
NN_count = 0
После того, как мы создадим переменные, мы создадим два цикла for.первый циклбудет перебирать каждый твит в списке.вторая петляБудет перебирать каждую пару токен/тег в каждом твите. Для каждой пары мы будем искать токен, используя соответствующий индекс кортежа.
Затем используйте условный оператор, чтобы проверить, соответствует ли метка строке «JJ» или «NN». Если токены совпадают, мы добавляем (+=1) к соответствующему аккумулятору.
nlp.py
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
JJ_count = 0
NN_count = 0
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == 'JJ':
JJ_count += 1
elif tag == 'NN':
NN_count += 1
После завершения двух циклов в корпусе отображается общее количество прилагательных и существительных. Чтобы увидеть, сколько прилагательных и существительных нашел наш скрипт, добавьте оператор печати в конце скрипта.
nlp.py
...
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == 'JJ':
JJ_count += 1
elif tag == 'NN':
NN_count += 1
print('Total number of adjectives = ', JJ_count)
print('Total number of nouns =', NN_count)
Теперь наша программа может выводить количество прилагательных и существительных, найденных в корпусе.
Шаг шестой, запустите скрипт НЛП
Сохраните файл nlp.py и запустите его, чтобы увидеть, сколько прилагательных и существительных мы находим:
$ python nlp.py
Пожалуйста, будьте терпеливы, запуск скрипта может занять несколько секунд. Если все пойдет хорошо, мы должны получить следующий вывод при запуске скрипта:
Total number of adjectives = 6094
Total number of nouns = 13180
Если ваш вывод такой же, вы успешно завершили этот урок!
полный код
Для нашего полного кода мы добавляем некоторые комментарии. Наш скрипт выглядит так:
nlp.py
# Import data and tagger
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
# Load tokenized tweets
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
# Tag tagged tweets
tweets_tagged = pos_tag_sents(tweets_tokens)
# Set accumulators
JJ_count = 0
NN_count = 0
# Loop through list of tweets
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == 'JJ':
JJ_count += 1
elif tag == 'NN':
NN_count += 1
# Print total numbers for each adjectives and nouns
print('Total number of adjectives = ', JJ_count)
print('Total number of nouns = ', NN_count)
В этом руководстве мы использовали корпус Twitter, загруженный через NLTK, но вы можете прочитать свои собственные данные. Теперь вы можете расширить свой код, чтобы подсчитывать существительные во множественном и единственном числе, выполнять анализ тональности прилагательных или визуализировать свои данные с помощью matplotlib.
В заключение
В этом руководстве вы узнали о некоторых методах обработки естественного языка для анализа текста с использованием библиотеки NLTK в Python. Теперь вы можете загружать корпуса, токены, токены и подсчитывать токены POS в Python. Вы можете воспользоваться этим учебным пособием, чтобы упростить работу с вашими собственными текстовыми данными в Python. Если вас интересует НЛП, вы можете посетить Tencent Cloud AcademyКурсы, связанные с обработкой естественного языка.
Ссылка: «Как работать с языковыми данными в Python 3 с помощью набора инструментов для естественного языка (NLTK)»
вопросы и ответы
Сжатие предложений с использованием НЛП?
Связанное Чтение
Устранение неполадок при установке и настройке Nginx
Эта статья была разрешена автором для публикации сообщества Tencent Cloud +, исходная ссылка: https://cloud.tencent.com/developer/article/1161355?fromSource=waitui.
Добро пожаловать в сообщество Tencent Cloud+ или подпишитесь на общедоступную учетную запись WeChat облачного сообщества (QcloudCommunity), чтобы как можно скорее получить больше массовой технической практики по сухим товарам~
Огромный технический практический опыт, все вСообщество Юнцзя!