2012-12-27 3 views
2

스탠포드 coreNLP를 사용하여 문장을 단어로 분할하려고합니다. 아포스트로피가 포함 된 단어에 문제가 있습니다.스탠포드 coreNLP - 아포스트로피를 무시한 단어 분할

예를 들어, 문장 : 나는 24 세입니다. 이 같은

분할 : [I] [ 'm] [24] [년] [세]

이 가능이 사용 스탠포드 coreNLP? 처럼 분할하는 것입니다 [난] [24 ] [years] [old]

tokenize.whitespace를 사용해 보았지만 '?'와 같은 다른 구두점을 사용하지 않았습니다. ','

+0

나는 문장에서도 단어를 분리하려고합니다. 어떻게 그 일을 처리 했습니까? 그것은 그들의 API의 javadocs에 의해 혼란스러워진다. – Tim

답변

4

, 아니. 후속 스탠포드 CoreNLP 처리 도구는 모두 수축을 두 개의 토큰으로 분리하는 Penn Treebank tokenization을 사용합니다 (두 개의 "단어"[I] [ 'm]로 만듦으로써 "나는"나는 축소 된 형태로 "나는"에 관한 것입니다). 다른 유형의 토큰 화를 원한다고들합니다.

일부 토큰 화 옵션이 있지만이를 변경할 수있는 옵션이 없으며 POS 테거 러 또는 파서와 같은 후속 도구는 수축이 나눠지지 않고 제대로 작동하지 않습니다. REDAUX 및 SREDAUX 후행 컨텍스트 처리를 변경 (삭제)하는 것과 같은 옵션을 토큰 화 프로그램에 추가 할 수 있습니다.

@dhg가 제안하는 것처럼 후 처리를 통해 수축에 참여할 수도 있지만 "if"에서 좀 더주의 깊게 처리하여 따옴표에 포함시키지 않을 수 있습니다.

+0

현재''can't''은''ca''와''n't''로 나뉘어져 있습니다. 그 뒤에있는 근거는 무엇입니까? 나는 그것이'can'과't'라고 기대한다. –

+0

@Christopher Manning 비슷한 질문이 있습니다. abc * def와 같은 문장에서는 abc, *, def로 나뉩니다. 하지만 다른 토큰으로 간주되는 것을 원하지 않습니다. 어떻게 해결할 수 있습니까? – AV94

+1

@ AngularInDepth.com 어느 쪽이든 선택이 가능합니다.이 선택은 아마도 'do'가 아닌'do' +'n't',''wo' +'n't''가 될 것입니다 Penn Treebank 토큰 화 표준은 영어로 많은 NLP 리소스에 사용되는 것이기 때문에 근본적으로 이렇게합니다. –

3

아포스트로피로 분리 된 토큰을 다시 연결하는 경우는 어떻습니까?

다음은 자바로 구현의 : 현재

public static List<String> tokenize(String s) { 
    PTBTokenizer<CoreLabel> ptbt = new PTBTokenizer<CoreLabel>(
      new StringReader(s), new CoreLabelTokenFactory(), ""); 
    List<String> sentence = new ArrayList<String>(); 
    StringBuilder sb = new StringBuilder(); 
    for (CoreLabel label; ptbt.hasNext();) { 
     label = ptbt.next(); 
     String word = label.word(); 
     if (word.startsWith("'")) { 
      sb.append(word); 
     } else { 
      if (sb.length() > 0) 
       sentence.add(sb.toString()); 
      sb = new StringBuilder(); 
      sb.append(word); 
     } 
    } 
    if (sb.length() > 0) 
     sentence.add(sb.toString()); 
    return sentence; 
} 

public static void main(String[] args) { 
    System.out.println(tokenize("I'm 24 years old.")); // [I'm, 24, years, old, .] 
} 
2

소유욕과 수축이 있습니다. 당신의 본보기는 수축이다. 아포 스트로피를 찾는 것만으로도 둘 사이의 차이점을 찾을 수 없습니다. "이것은 피트의 대답입니다. 당신이 그것을 알고 있었을 것입니다." 이 두 문장에는 각각의 경우 중 하나가 있습니다.

품사 태그를 사용하면 차이를 알 수 있습니다. 트리 외과 의사 구문을 사용하여 이들을 조합하고 변경할 수 있습니다. 구문은 여기에 나열되어 있습니다 : http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/trees/tregex/tsurgeon/package-summary.html. 나는 나무 외과의가 NP 그룹을 분리하는 데 정말 유용하다는 것을 발견했습니다.

또는 "am"이 "am"입니까? 그것들을 찾고 줄기 표식을 찾아 단순히 그 값으로 되 돌리는 것이 좋습니다. 스템 밍은 기계 학습 및 분석의 다른 많은 측면에서 매우 유용합니다.