Abordagem geral para extrair o texto principal da frase (PNL)

27

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?

William Falcon
fonte
Veja Termine e documentos associados ao projeto: nactem.ac.uk/software/termine
MrMeritology

Respostas:

30

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:

  • Consulte o banco da árvore Penn para entender a descrição da tag PoS https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html
  • Dependendo dos seus dados e do contexto comercial, você pode decidir o valor n para extrair n-gramas da frase
  • A adição de palavras de parada específicas do domínio aumentaria a qualidade da extração de conceito / tema
  • A técnica profunda da PNL fornecerá melhores resultados, isto é, em vez de n-grama, detectará relacionamentos nas frases e representará / expressará como uma construção complexa para reter o contexto. Para informações adicionais, consulte /stats//a/133680/66708

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

Manohar Swamynathan
fonte
Excelente resposta (+1). Apenas uma sugestão: se possível, forneça literatura ou, pelo menos, referências gerais para a técnica superficial da PNL que você mencionou.
Aleksandr Blekh 25/03
11
Muito obrigado. Duas perguntas, posso fazer isso com o nltk? Posso usar o tf-idf para fazer o mesmo e, em seguida, usar as palavras mais exclusivas (pontuações mais altas) como minhas palavras-chave?
William Falcon
@ Aleksandr Blekh, obrigado. Eu adicionei links de leitura adicionais para aprender mais sobre PNL superficial e profunda. Espero que ajude #
Manohar Swamynathan
@ William Falcon, obrigado. 1) Sim, você pode usar o nltk 2) Absolutamente, o TF-IDF pode ser usado Se você está tentando encontrar o conceito ou tema no (s) documento (s).
Manohar Swamynathan
3

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 .

Aleksandr Blekh
fonte
0

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/

Michael Cox
fonte
Os links não são considerados respostas válidas neste site. Responda à pergunta original em sua postagem e use os links para complementar sua resposta.
sheldonkreger