2014-04-06 1 views
4

WordNet을 사용하여 문장의 의미가 여전히 같은 (또는 대부분 같은) 문장을 다시 작성할 수 있습니까?의미 론적 의미를 유지하면서 문장 다시 쓰기

의 내가이 문장 있다고 가정 해 봅시다 : 문장의 구조를 변경하는 것이 아닌 경우

Obama and Putin met the previous week. 
Obama and Putin met each other a week ago. 
  • :

    Obama met with Putin last week. 
    
    1. 이 같은 대안으로 문장을 바꿔하는 워드 넷을 사용할 수를 가능하면 WordNet을 사용하여 관련 동의어 만 바꿀 수 있습니까? 예를 들어

      :

      Obama met Putin the previous week. 
      
  • +0

    이 토론을 살펴보십시오. http://stackoverflow.com/q/21990004/3279460. –

    답변

    6

    이 문제는 WordNet 문장이 의역 할을 사용할 수있는 경우. 많은 문법적/구문 적 구성 요소로 가능합니다.

    • 먼저 토큰의 개별 의미를 얻고 구문의 문장을 구문 분석 : 당신은 시스템이 필요합니다.
    • 그런 다음
    • 그런 다음 몇 가지 문법 발전기와 문장을 재탕 (이 은유의 경우 특히) 복합 문장의 전체적인 의미를 이해합니다.

    지금까지만해도 ACE 파서/생성기는 그와 비슷한 기능을 수행 할 수 있지만 시스템을 해킹하여 많은 의역 생성기로 사용할 수 있습니다. http://sweaglesw.org/linguistics/ace/

    그래서 귀하의 질문에 대답하는

    ,

    는 대안으로 문장을 바꿔하는 워드 넷을 사용할 수 있습니까? 슬프게도, WordNet은 은불입니다. 의역 작업에 의미 이상의 의미가 필요합니다.

    문장 구조를 변경할 수없는 경우 WordNet을 사용하여 관련 동의어 만 바꿀 수 있습니까? 예 가능합니다. 어떤 동의어가 replace-able인지 파악하는 것은 어렵습니다 ... 그리고 당신은 또한 어떤 형태/문법 구성 요소가 필요할 것입니다.

    먼저 당신이 단어에 여러 감각의 문제로 실행됩니다 :

    from nltk.corpus import wordnet as wn 
    sent = "Obama met Putin the previous week" 
    
    for i in sent.split(): 
        possible_senses = wn.synsets(i) 
        print i, len(possible_senses), possible_senses 
    

    [OUT] :

    Obama 0 [] 
    met 13 [Synset('meet.v.01'), Synset('meet.v.02'), Synset('converge.v.01'), Synset('meet.v.04'), Synset('meet.v.05'), Synset('meet.v.06'), Synset('meet.v.07'), Synset('meet.v.08'), Synset('meet.v.09'), Synset('meet.v.10'), Synset('meet.v.11'), Synset('suffer.v.10'), Synset('touch.v.05')] 
    Putin 1 [Synset('putin.n.01')] 
    the 0 [] 
    previous 3 [Synset('previous.s.01'), Synset('former.s.03'), Synset('previous.s.03')] 
    week 3 [Synset('week.n.01'), Synset('workweek.n.01'), Synset('week.n.03')] 
    

    이 그럼 당신은 감각을 알고있는 경우에도 (의 첫 번째 감각을 가정 해 봅시다) 감각 당 여러 단어를 얻을 수 있으며 모든 단어를 문장에서 바꿀 수있는 것은 아닙니다. 또한, 그들은 표면 형태가 아닌 lemma 형태이다.동사는 기본 형태 (시제 단순한 존재)이며 명사) 단수로 있습니다

    from nltk.corpus import wordnet as wn 
    sent = "Obama met Putin the previous week" 
    
    for i in sent.split(): 
        possible_senses = wn.synsets(i) 
        if possible_senses: 
         print i, possible_senses[0].lemma_names 
        else: 
         print i 
    

    [출력] nltk 읽기와

    Obama 
    met ['meet', 'run_into', 'encounter', 'run_across', 'come_across', 'see'] 
    Putin ['Putin', 'Vladimir_Putin', 'Vladimir_Vladimirovich_Putin'] 
    the 
    previous ['previous', 'old'] 
    week ['week', 'hebdomad']