2014-11-30 11 views
6

나는 wordnet 데이터베이스 설정을 가지고 있으며 다양한 단어에 대한 동의어를 생성하려고합니다.최상위, 비교 및 ​​형용사를 생성하기 위해 Wordnet 사용

예를 들어 "great"라는 단어. 살펴보고 몇 가지 다른 동의어를 찾아 보겠지만 그 중 어느 것도 그 정의에 실제로 들어 맞지 않습니다. 예를 들어, 하나는 "최상급"입니다.

주어진 언어에서 빈도별로 검사하거나 기본 단어를 얻기 위해 형태소 분석을해야한다고 생각합니다 (예 : great -> great, great -> best).

내 단어가 약간의 의미를 갖도록하기 위해 어떤 표를 사용해야합니까?

+0

Lemmatize는, 줄기하지 않는 유효한 변환이라고 말할 주관적인 것 같아요. 또한, 당신은 "어떤 테이블 ... 감각?" –

+0

중대한 것에서 중대한 것까지 아마 품사에 의해 수교 될 수있다 tagger JJ, JJR, JJS를 여기에서보십시오 https://gate.ac.s/sale/tao/splitap7.html#x39-802000G. 정말 멀리 가져온 제안으로 단어 삽입을 살펴볼 수 있습니다. https://code.google.com/p/word2vec/ 닫기 단어는 동의어가 아니지만 모델을 조정하고 올바른 데이터를 학습하면 동의어가 생성 될 수 있습니다 . 또는 시소러스 결과와 단어 클러스터 간의 교차점을 가져 오십시오. – Yasen

답변

4

어느 형태소 분석기 또는 lemmatizer는 greatest에서 당신을 얻을 수 있습니다 ->great :

>>> from nltk.stem import WordNetLemmatizer 
>>> from nltk.stem import WordNetLemmatizer, PorterStemmer 
>>> porter = PorterStemmer() 
>>> wnl = WordNetLemmatizer() 
>>> greatest = 'greatest' 
>>> porter.stem(greatest) 
u'greatest' 
>>> wnl.lemmatize(greatest) 
'greatest' 
>>> greater = 'greater' 
>>> wnl.lemmatize(greater) 
'greater' 
>>> porter.stem(greater) 
u'greater' 

을하지만 greatest -> great에서 얻을 수있는 PennTreeBank 태그 세트의 일부 좋은 속성을 사용할 수있다처럼 보인다 :

>>> from nltk import pos_tag 
>>> pos_tag(['greatest']) 
[('greatest', 'JJS')] 
>>> pos_tag(['greater']) 
[('greater', 'JJR')] 
>>> pos_tag(['great']) 
[('great', 'JJ')] 

미친 규칙 기반 시스템을 사용해 보겠습니다. greatest부터 시작합니다.

>>> import re 
>>> word1 = 'greatest' 
>>> re.sub('est$', '', word1) 
'great' 
>>> re.sub('est$', 'er', word1) 
'greater' 
>>> pos_tag([re.sub('est$', '', word1)])[0][1] 
'JJ' 
>>> pos_tag([re.sub('est$', 'er', word1)])[0][1] 
'JJR' 
>>> word1 
'greatest' 

이제 우리는 우리 자신의 최상급 줄기/lemmatizer/tail_substituter를 만들 수 있다는 것을 알게되었으므로 한 단어가 최상위 POS 태그를 제공하고 우리의 줄을 때 JJ를주고 변환 할 때 JJ를 제공하는 규칙을 작성합시다. 우리는 안전하게 단어의 비교 및 ​​기본 형식은 쉽게 우리의 tail_substituter으로 입수 할 수 있다고 할 수 있습니다

>>> if pos_tag([word1])[0][1] == 'JJS' \ 
... and pos_tag([re.sub('est$', '', word1)])[0][1] == 'JJ' \ 
... and pos_tag([re.sub('est$', 'er', word1)])[0][1] == 'JJR': 
...  comparative = re.sub('est$', 'er', word1) 
...  adjective = re.sub('est$', '', word1) 
... 
>>> adjective 
'great' 
>>> comparative 
'greater' 

지금 그 greatest -> greater -> great에서 당신을 가져옵니다. great -> best에서 이상한 일종입니다. 어휘 적으로 그들은 의미 론적 관계가 관련되어 보이지만 관련이 없습니다.

그래서 내가 그것을 great -> best

+0

저는 실제로 NLTK를 사용하지는 않지만 Wordnet은 MySQL 데이터베이스로 변환되었습니다. 그러나 이것에 대해 살펴 보겠습니다. 이것은 합리적인 해결책처럼 보입니다. –