Дано предложение вроде:
Complimentary gym access for two for the length of stay ($12 value per person per day)
Какой общий подход я могу использовать для определения слова спортзал или доступ в спортзал?
Дано предложение вроде:
Complimentary gym access for two for the length of stay ($12 value per person per day)
Какой общий подход я могу использовать для определения слова спортзал или доступ в спортзал?
Ответы:
Малая N atural л anguage Р rocessing техника может быть использована для извлечения концепции из предложения.
-------------------------------------------
Неглубокие этапы техники НЛП:
1) преобразовать предложение в нижний регистр
2) Удалите стоп-слова (это общие слова, встречающиеся в языке. Такие слова, как for, very, и, of, are и т. Д., Являются общими стоп-словами)
3) Извлечь n-грамм, т. Е. Непрерывную последовательность из n элементов из заданной последовательности текста (просто увеличивая n, модель можно использовать для хранения большего контекста)
4) Назначьте синтаксическую метку (существительное, глагол и т. Д.)
5) Извлечение знаний из текста с помощью семантического / синтаксического анализа, т. Е. Попытаться сохранить слова, которые имеют больший вес, в предложении, таком как существительное / глагол
-------------------------------------------
Давайте рассмотрим результаты применения вышеуказанных шагов к вашему предложению Complimentary gym access for two for the length of stay ($12 value per person per day)
.
1-грамм. Результаты: тренажерный зал, доступ, продолжительность, пребывание, ценность, человек, день
Summary of step 1 through 4 of shallow NLP:
1-gram PoS_Tag Stopword (Yes/No)? PoS Tag Description
-------------------------------------------------------------------
Complimentary NNP Proper noun, singular
gym NN Noun, singular or mass
access NN Noun, singular or mass
for IN Yes Preposition or subordinating conjunction
two CD Cardinal number
for IN Yes Preposition or subordinating conjunction
the DT Yes Determiner
length NN Noun, singular or mass
of IN Yes Preposition or subordinating conjunction
stay NN Noun, singular or mass
($12 CD Cardinal number
value NN Noun, singular or mass
per IN Preposition or subordinating conjunction
person NN Noun, singular or mass
per IN Preposition or subordinating conjunction
day) NN Noun, singular or mass
Step 4: Retaining only the Noun/Verbs we end up with gym, access, length, stay, value, person, day
Позволяет увеличить n, чтобы сохранить больше контекста и удалить стоп-слова.
2-граммовые результаты: бесплатный тренажерный зал, посещение тренажерного зала, длительность пребывания, стоимость проживания
Summary of step 1 through 4 of shallow NLP:
2-gram Pos Tag
---------------------------
access two NN CD
complimentary gym NNP NN
gym access NN NN
length stay NN NN
per day IN NN
per person IN NN
person per NN IN
stay value NN NN
two length CD NN
value per NN IN
Step 5: Retaining only the Noun/Verb combination we end up with complimentary gym, gym access, length stay, stay value
Результаты 3 грамма: бесплатный доступ в тренажерный зал, длительность пребывания, человек в день
Summary of step 1 through 4 of shallow NLP:
3-gram Pos Tag
-------------------------------------
access two length NN CD NN
complimentary gym access NNP NN NN
gym access two NN NN CD
length stay value NN NN NN
per person per IN NN IN
person per day NN IN NN
stay value per NN NN IN
two length stay CD NN NN
value per person NN IN NN
Step 5: Retaining only the Noun/Verb combination we end up with complimentary gym access, length stay value, person per day
То, что нужно запомнить:
Инструменты:
Вы можете рассмотреть возможность использования OpenNLP / StanfordNLP для тегов части речи. Большинство языков программирования имеют вспомогательную библиотеку для OpenNLP / StanfordNLP. Вы можете выбрать язык в зависимости от вашего комфорта. Ниже приведен пример кода R, который я использовал для маркировки PoS.
Пример кода R:
Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre7') # for 32-bit version
library(rJava)
require("openNLP")
require("NLP")
s <- paste("Complimentary gym access for two for the length of stay $12 value per person per day")
tagPOS <- function(x, ...) {
s <- as.String(x)
word_token_annotator <- Maxent_Word_Token_Annotator()
a2 <- Annotation(1L, "sentence", 1L, nchar(s))
a2 <- annotate(s, word_token_annotator, a2)
a3 <- annotate(s, Maxent_POS_Tag_Annotator(), a2)
a3w <- a3[a3$type == "word"]
POStags <- unlist(lapply(a3w$features, `[[`, "POS"))
POStagged <- paste(sprintf("%s/%s", s[a3w], POStags), collapse = " ")
list(POStagged = POStagged, POStags = POStags)
}
tagged_str <- tagPOS(s)
tagged_str
#$POStagged
#[1] "Complimentary/NNP gym/NN access/NN for/IN two/CD for/IN the/DT length/NN of/IN stay/NN $/$ 12/CD value/NN per/IN person/NN per/IN day/NN"
#
#$POStags
#[1] "NNP" "NN" "NN" "IN" "CD" "IN" "DT" "NN" "IN" "NN" "$" "CD"
#[13] "NN" "IN" "NN" "IN" "NN"
Дополнительные чтения по Shallow & Deep NLP:
Обработка мелкой и глубокой НЛП для обучения онтологии: краткий обзор Нажмите здесь
Интеграция Shallow и Deep NLP для извлечения информации Нажмите здесь
Вам необходимо проанализировать структуру предложения и извлечь соответствующие синтаксические категории, представляющие интерес (в этом случае, я думаю, это будет существительное , которое является фразовой категорией ). Подробности см. В соответствующей статье Википедии и главе «Анализ структуры предложений» книги NLTK.
Что касается доступных программных инструментов для реализации вышеупомянутого подхода и выше, я бы предложил рассмотреть либо программное обеспечение NLTK (если вы предпочитаете Python), либо программное обеспечение StanfordNLP (если вы предпочитаете Java). Для многих других платформ NLP, библиотек и поддержки программирования на разных языках, смотрите соответствующие разделы (NLP) в этом превосходном списке .
Если вы пользователь R, есть много полезной практической информации на http://www.rdatamining.com . Посмотрите на их примеры добычи текста.
Кроме того, взгляните на пакет ТМ.
Это также хороший сайт агрегации - http://www.tapor.ca/