2014-02-21 1 views
2

주어진 임의의 단어 집합에서 단어의 중요성을 찾으려고합니다. 예를 들어, "사고"가 "남자, 여자, 사고"라는 단어에서 가장 중요한 단어라는 것을 알고 싶습니다. 순진한 해결책은 각 단어에 대해 WordNet 깊이를 얻고 단어 깊이의 차이에 따라 단어의 중요성을 계산하는 것이 었습니다. 이 솔루션은 최종 중요성을 생성하기 위해 n (n-1) 개의 계산이 필요하기 때문에 상당히 많은 시간이 소요됩니다. 이 시나리오를 처리 할 수있는 더 나은 솔루션이 있습니까?주어진 단어 집합에서 가장 두드러진 단어를 식별하는 알고리즘이 있습니까?

+0

이것은 어떻게 파이썬과 관련이 있습니까? –

+0

아, 제 잘못입니다. 내 현재 구현과 nltk 및 파이썬 사용하고 있습니다. 나는 qn을 편집 할 것이다. 곧. – Kartos

+1

"중요성"에 대한 적절한 정의가 있습니까? 정보 내용과 관련이 있다면 단순히 코퍼스의 빈도를 사용하면됩니다 (자주 사용되는 단어는 덜 구체적인 경향이 있음). – tripleee

답변

1

일반적으로 단어가 덜 일반적 일수록 중요합니다.

먼저 문제가되는 도메인을 나타내는 자료를 선택하십시오. 그런 다음 단어 빈도 카운트를 실행하십시오. 이 두 세트를 건너 뛸 수 있으며 미리 만들어진 목록을 사용할 수 있습니다 (예 : http://en.wiktionary.org/wiki/Wiktionary:Frequency_lists 및 예 : http://en.wiktionary.org/wiki/Wiktionary:Frequency_lists/PG/2006/04/1-10000 그러나 단어 빈도를 만드는 것은 Python/NLTK에서 더 쉬운 일 중 하나입니다.

세 번째 단계는 각 입력 단어의 빈도를 찾고, 이 가장 낮은 숫자 인이 가장 두드러진 단어입니다. 또는 이것이 다른 단계에 입력되고 실수가 유용하다면, tf-idf은 그것을 제공합니다.

먼저 단어를 정규화/줄기를 원할 수 있습니다. 그것은 귀하의 신청에 달려 있습니다. 그러나 그렇게한다면 생성 단계 (즉, 코퍼스 정규화)와 사용 단계 (입력 정규화)에서 모두 수행해야합니다. 여기

http://www.collinsdictionary.com/dictionary/english/man 여기 말씀 사용법 동향 박스에서 주파수 카운트를 사용하여 몇 가지 예입니다 :

man   0.0289 
woman  0.0149 
walk   0.0064 
shot   0.0049 
accident  0.0048 

는 다행히 그 숫자는 당신이 준 정답과 일치 : 사고 샷.

+0

이 문제를 해결할 수있는 좋은 방법을 제공해 주셔서 감사합니다. 처음에는 단어 표제를 찾기 위해 모든 보조 정리에 걸쳐 빈도 카운트의 역수를 사용했습니다. 줄기 제거는 내 마음을 가로 질러 왔지만 NLTK 또는 다른 단어 엔진은 꽤 나쁜 형태소 분석을 수행합니다. – Kartos

관련 문제