Дано таке речення:
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 техніка може бути використана для отримання концепції з пропозиції.
-------------------------------------------
Дрібні кроки техніки NLP:
1) Перетворіть речення в малі
2) Видаліть стоп-слова (це звичайні слова, що зустрічаються в мові. Слова, такі як, дуже, і, з, є і т. Д., Є загальними словами зупинки)
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:
Неглибока та глибока обробка НЛП для вивчення онтології: короткий огляд Натисніть тут
Інтеграція "Мілкого та глибокого НЛП" для вилучення інформації натисніть тут
Вам потрібно проаналізувати структуру речень та витягнути відповідні синтаксичні категорії, що цікавлять (у цьому випадку, я думаю, це було б іменниковою фразою , яка є фразовою категорією ). Детальніше дивіться відповідну статтю у Вікіпедії та розділ "Аналіз структури вироків" книги NLTK.
Що стосується наявних програмних засобів для впровадження вищезазначеного підходу та за його межами, я б запропонував розглянути або NLTK (якщо ви віддаєте перевагу Python), або програмне забезпечення StanfordNLP (якщо ви віддаєте перевагу Java). Для багатьох інших фреймворків NLP, бібліотек та програм програмування різних мов див. Відповідні розділи (NLP) у цьому відмінному кураторі .
Якщо ви користувач R, на http://www.rdatamining.com є багато корисної практичної інформації . Подивіться їхні приклади видобутку тексту.
Також погляньте на пакет tm.
Це також хороший сайт агрегації - http://www.tapor.ca/