2012-02-28 5 views
6

나는 형태소 분석을 수행하기 위해 lucene snowball analyzer를 사용합니다. 결과는 의미있는 단어가 아닙니다. 나는 이것을 question이라고 불렀다.형태소 분석의 역 과정

해결 방법 중 하나는 단어의 변형 된 버전과 안정적인 버전의 단어 사이에지도가 포함 된 데이터베이스를 사용하는 것입니다. (communiti (커뮤니티/또는 다른 단어)에 대한 기반이 무엇이든 상관없이 communiti에서 커뮤니티로의 예)

이러한 기능을 수행하는 데이터베이스가 있는지 알고 싶습니다.

답변

4

한 줄기가 여러 단어에 공통적 일 수 있으므로 줄기에서 특정 단어를 복구하는 것은 이론적으로 불가능합니다. . 하나의 가능성은 응용 프로그램에 따라 여러 줄의 배열로 매핑 된 줄기 데이터베이스를 만드는 것입니다. 그러나 당신은 그 단어들 중 어느 것이 재 변환 할 줄기가 주어 졌는지 예측할 필요가 있습니다. 당신이 단어 태그를 알고있는 경우에이 문제에 매우 순진 솔루션으로

는, 당신은 당신의 데이터베이스에 태그 단어를 저장하는 시도 할 수 있습니다 : 다음

run: 
    NN:  runner 
    VBG: running 
    VBZ: runs 

, 줄기 "실행"및 태그 지정 "NN", 당신은 "러너"가 그 맥락에서 가장 가능성있는 단어라고 판단 할 수 있습니다. 물론, 그 해결책은 완벽하지 않습니다. 특히, 동일한 단어 형식이 다른 상황에서 다르게 태그 될 수 있다는 사실을 처리해야합니다. 그러나이 문제를 해결하려는 시도는 기껏해야 근사치라는 것을 기억하십시오.

편집 : 아래 주석에서 아마 형태소 분석 대신에 lemmatization을 사용하려는 것 같습니다. Stanford Core NLP tools을 사용하여 단어의 보조 정리를 얻는 방법은 다음과 같습니다.

import java.util.*; 

import edu.stanford.nlp.pipeline.*; 
import edu.stanford.nlp.ling.*; 
import edu.stanford.nlp.ling.CoreAnnotations.*; 

Properties props = new Properties(); 

props.put("annotators", "tokenize, ssplit, pos, lemma"); 
pipeline = new StanfordCoreNLP(props, false); 
String text = "Hello, world!"; 
Annotation document = pipeline.process(text); 

for(CoreMap sentence: document.get(SentencesAnnotation.class)) { 
    for(CoreLabel token: sentence.get(TokensAnnotation.class)) { 
     String word = token.get(TextAnnotation.class); 
     String lemma = token.get(LemmaAnnotation.class); 
    } 
} 
+0

줄기를 사용하여 잘 작동하는 단어. 나는 효율성과 같은 말을하고있다. 형태소 분석의 효율성은 의미가없는 효능이된다. 내가 동행 할 계획이라면 효능을 생산 한 효율성 (효율성/다른 단어)에 관계없이 효율을 효율성으로 전환하는 것입니다. – CTsiddharth

+0

다음으로 아마도 lemmatization (단어의 "기본"형태를 찾는 것 - 사전에 나열 될 내용) (단어의 "뿌리"를 찾는) 형태소 분석이 아닙니다. 줄기는 "효율적인"-> "효율"-> "효율성"과 같은 많은 기본 단어를 가질 수 있습니다. 하나의 보조 정리는 "효율적인"-> "효율적", "효율성"-> "효율성", "효율성"-> "효율성"과 같은 하나의 기본어에 해당합니다. 형태소 분석에서는 굴절과 기본 단어를 모두 잃게됩니다. 음표 화에서, 당신은 단지 억압을 잃게됩니다. 게시물에 방금 추가 한 코드는 Stanford 언어 화 도구로 시작해야합니다. – user2398029

+0

안녕하세요.이 [질문] (http://stackoverflow.com/questions/9528080/error-in-stanford-nlp-core#comment12070615_9528080)을 살펴보고 도와주세요! – CTsiddharth

1

NCI Metathesaurus을 볼 수도 있습니다. 대부분 생물 의학이지만 자연어 처리 및 Java 용 오픈 소스 도구 세트를 제공합니다.이 도구 세트는 코드를 탐색하여 유용 할 수 있습니다.

2

당신이 참조하는 질문은 종종 간과되는 중요한 정보를 포함합니다. 당신이 필요로하는 것은 "정규화"로 알려져 있습니다 - 굴절 된 단어를 정식 형태로 축소합니다. 그것은 관련이 있지만 형태소 분석과 다르며 아직 공개 된 연구 문제입니다. 좀 더 복잡한 형태 (영어는 그리 어렵지 않음)를 가진 언어의 경우 특히 어렵습니다. Wikipedia에는 시도 할 수있는 소프트웨어 목록이 있습니다. 내가 사용한 또 다른 도구는 TreeTagger입니다.이 도구는 주로 빠르고 쉽게 사용할 수 있습니다. 단, 주 목적은 품사 태그 지정이고 표기법은 보너스입니다. "통계적 명제화"에 대한 인터넷 검색을 시도하십시오. (예, 규칙 기반의 NLP와 통계에 대해 강한 인상을 가지고 있습니다.)