Dada uma frase como:
Complimentary gym access for two for the length of stay ($12 value per person per day)
Que abordagem geral posso adotar para identificar a palavra academia ou acesso à academia?
Dada uma frase como:
Complimentary gym access for two for the length of stay ($12 value per person per day)
Que abordagem geral posso adotar para identificar a palavra academia ou acesso à academia?
Respostas:
Raso N atural L anguage P técnica rocessing pode ser usado para extrair conceitos de frase.
-------------------------------------------
Etapas técnicas da PNL rasa:
1) Converta a frase para minúscula
2) Remova palavras irrelevantes (são palavras comuns encontradas em um idioma. Palavras como para, muito e, de, são, etc, são palavras comuns)
3) Extraia n-grama, isto é, uma sequência contígua de n itens de uma determinada sequência de texto (simplesmente aumentando n, o modelo pode ser usado para armazenar mais contexto)
4) Atribua um rótulo sintático (substantivo, verbo etc.)
5) Extração de conhecimento do texto através da abordagem de análise semântica / sintática, isto é, tente reter palavras que tenham maior peso em uma frase como Substantivo / Verbo
-------------------------------------------
Vamos examinar os resultados da aplicação das etapas acima à sua frase Complimentary gym access for two for the length of stay ($12 value per person per day)
.
1 grama Resultados: academia, acesso, duração, estadia, valor, pessoa, dia
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
Permite aumentar n para armazenar mais contexto e remover palavras irrelevantes.
2 gramas Resultados: academia de cortesia, acesso à academia, duração da estadia, estadia
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
Resultados em 3 gramas: acesso gratuito à academia, valor da estadia, pessoa por dia
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
Coisas para lembrar:
Ferramentas:
Você pode considerar o uso do OpenNLP / StanfordNLP para marcação de parte do discurso. A maioria da linguagem de programação possui biblioteca de suporte para OpenNLP / StanfordNLP. Você pode escolher o idioma com base no seu conforto. Abaixo está o código R de amostra que usei para a marcação PoS.
Código R de amostra:
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"
Leituras adicionais sobre PNL superficial e profunda:
Processamento superficial e profundo da PNL para aprendizado de ontologia: uma visão geral rápida Clique aqui
Integrando a PNL superficial e profunda para extração de informações, clique aqui
Você precisa analisar a estrutura da sentença e extrair as categorias sintáticas correspondentes de interesse (nesse caso, acho que seria uma frase substantiva , que é uma categoria frasal ). Para obter detalhes, consulte o artigo correspondente da Wikipedia e o capítulo "Analisando a estrutura das frases" do livro do NLTK.
Em relação às ferramentas de software disponíveis para implementar a abordagem acima mencionada e além, sugiro considerar o software NLTK (se você preferir Python) ou StanfordNLP (se você preferir Java). Para muitas outras estruturas de PNL, bibliotecas e programação de vários idiomas, consulte as seções correspondentes (PNL) nesta excelente lista com curadoria .
Se você é um usuário R, há muitas informações práticas boas em http://www.rdatamining.com . Veja os exemplos de mineração de texto.
Além disso, dê uma olhada no pacote tm.
Este também é um bom site de agregação - http://www.tapor.ca/