문장에서 핵심 텍스트를 추출하는 일반적인 접근법 (nlp)


27

다음과 같은 문장이 주어집니다.

Complimentary gym access for two for the length of stay ($12 value per person per day)

체육관 또는 체육관 이용이라는 단어를 식별하기 위해 어떤 일반적인 방법을 사용할 수 있습니까?


Termine과 프로젝트 관련 논문을 살펴보십시오 : nactem.ac.uk/software/termine
MrMeritology

답변:


30

얕은 N atural L의 anguage의 P 세 싱 기술은 문장에서 개념들을 추출하는데 사용될 수있다.

-------------------------------------------

얕은 NLP 기술 단계 :

1) 문장을 소문자로 변환

2) 스톱 워드 제거 (이것은 언어에서 흔히 사용되는 단어입니다. for, very, and, of, etc 등의 단어는 공통 스톱 단어입니다)

3) n-gram을 추출합니다. 즉, 주어진 텍스트 시퀀스에서 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를 지원하는 라이브러리가 있습니다. 편안하게 언어를 선택할 수 있습니다. 아래는 PoS 태깅에 사용한 샘플 R 코드입니다.

샘플 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에 대한 추가 자료 :


탁월한 답변 (+1). 단 하나의 제안 : 가능하다면 언급 한 얕은 NLP 기술에 대한 문헌을 제공하거나 최소한 일반적인 참고 자료를 제공하십시오 .
Aleksandr Blekh 13:25에

1
정말 고맙습니다. 두 가지 질문, nltk 로이 작업을 수행 할 수 있습니까? tf-idf를 사용하여 동일한 작업을 수행 한 다음 가장 고유 한 단어 (가장 높은 점수)를 핵심 단어로 사용할 수 있습니까?
윌리엄 팔콘

@ Aleksandr Blekh, 감사합니다. 얕고 깊은 NLP에 대해 더 많이 배우기 위해 추가 독서 링크를 추가했습니다. 도움이
되길 바랍니다

@ 윌리엄 팔콘, 감사합니다. 1) 예, nltk를 사용할 수 있습니다. 2) 물론, TF-IDF를 사용할 수 있습니다. 문서 수준에서 개념이나 테마를 찾으려고하는 경우.
Manohar Swamynathan

3

당신은 할 필요가 문장 구조 분석 대응 추출물을 통 사적 범주 (이 경우, 나는 그것이있을 거라고 생각의 관심을 명사구 A는, phrasal 카테고리 ). 자세한 내용은 해당 Wikipedia 기사 및 NLTK 서적의 "문장 구조 분석" 장을 참조하십시오 .

위에서 언급 한 접근 방식 이상을 구현 하기 위해 사용 가능한 소프트웨어 도구와 관련하여 NLTK (Python을 선호하는 경우) 또는 StanfordNLP 소프트웨어 (Java를 선호하는 경우 ) 를 고려하는 것이 좋습니다 . 다른 많은 NLP 프레임 워크, 라이브러리 및 다양한 언어 지원 프로그래밍에 대해서는 이 엄선 된 목록의 해당 (NLP) 섹션을 참조하십시오 .


0

R 사용자 인 경우 http://www.rdatamining.com에 유용한 정보가 많이 있습니다. 텍스트 마이닝 예제를보십시오.
또한 tm 패키지를 살펴보십시오.
이것은 또한 좋은 집계 사이트입니다-http : //www.tapor.ca/


링크는이 사이트에서 유효한 답변으로 간주되지 않습니다. 게시물의 원래 질문에 답변하고 링크를 사용하여 답변을 보충하십시오.
sheldonkreger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.