문제

텍스트 단락을 가져 와서 "태그"목록에서 추출해야합니다. 이것의 대부분은 매우 간단합니다. 그러나 중복을 피하기 위해 결과 단어 목록을 제기하는 데 도움이 필요합니다. 예 : 커뮤니티 / 커뮤니티

Porter Stemmer 알고리즘의 구현을 사용했습니다 (그런데 PHP로 쓰고 있습니다).

http://tartarus.org/~martin/porterstemmer/php.txt

이것은 한 점까지 작동하지만 "실제"단어를 반환하지는 않습니다. 위의 예는 "의사 소통"으로 줄어 듭니다.

"스노우 볼"을 시도했습니다 (다른 스택 오버플로 스레드 내에서 제안).

http://snowball.tartarus.org/demo.php

내 예를 들어 (커뮤니티 / 커뮤니티), 눈덩이는 "공동체"에 기인합니다.

의문

이를 수행 할 다른 줄기 알고리즘이 있습니까? 다른 사람 이이 문제를 해결 했습니까?

내 현재의 생각은 중복을 피하기 위해 줄기 알고리즘을 사용한 다음 실제 단어를 표시하기 위해 가장 짧은 단어를 선택할 수 있다는 것입니다.

도움이 되었습니까?

해결책

여기서 핵심 문제는 줄기 알고리즘이 작동한다는 것입니다 음성적으로 순전히 함께 일하는 언어를 실제로 이해하지 못한 언어의 철자 규칙을 기반으로합니다. 실제 단어를 만들려면 줄기를 실제 단어로 다시 변환하기 위해 Stemmer의 출력을 어떤 형태의 조회 함수와 병합해야 할 것입니다. 기본적 으로이 작업을 수행 할 수있는 두 가지 방법을 볼 수 있습니다.

  1. 가능한 각 줄기를 실제 단어에 다시 맵핑하는 큰 사전을 찾거나 만듭니다. (예 : 공동체 -> 커뮤니티)
  2. 각 줄기를 해당 줄기로 축소 된 단어 목록과 비교하고 가장 유사한 것을 결정하려고 시도하는 함수를 만듭니다. (예 : "커뮤니티"와 "커뮤니티"와 "커뮤니티"를 비교하여 "커뮤니티"가 더 유사한 옵션으로 인식 될 것입니다)

개인적으로, 나는 그것이하는 방식이 역동적 인 형태의 #1이 될 것이라고 생각합니다. 1 #1의 역동적 인 형태가 될 것이라고 생각합니다. 검사 된 모든 단어를 기록하여 가장 일반적인 단어가 있어야한다고 가정하여 사용자 정의 사전 데이터베이스를 구축합니다. 사용된. (예를 들어, 내 소스 텍스트가 "커뮤니티"를 "커뮤니티"보다 자주 사용하고 공동체 -> 커뮤니티를 매핑하는 경우 사전 기반 접근 방식은 일반적으로 더 정확하고 Stemmer 입력을 기반으로 구축 할 수 있습니다. 주요 단점은 필요한 공간 인 텍스트에 맞게 사용자 정의되며, 이는 일반적으로 요즘 문제가되지 않습니다.

다른 팁

내가 올바르게 이해한다면, 당신이 필요로하는 것은 스템머가 아니라 lemmatizer입니다. Lemmatizer는 결말에 대한 지식이있는 도구입니다 -이, -ED, 등 및 예외적 인 단어 형식과 같은 , Lemmatizer는 입력 단어를 Lemma에 매핑합니다.이 단어는 "실제"단어로 보장됩니다.

영어를위한 많은 렘 메이저가 있습니다. morpha 그렇지만.모르파 실행 파일로 컴파일 할 수있는 큰 렉스 파일 일뿐입니다. 사용 예 :

$ cat test.txt 
Community
Communities
$ cat test.txt | ./morpha -uc
Community
Community

당신은 Morpha를 얻을 수 있습니다 http://www.informatics.sussex.ac.uk/research/groups/nlp/carroll/morph.html

이봐, 그게 너무 늦었는지 모르겠지만 실제 단어를 생성하는 PHP 스템 스크립트는 하나뿐입니다. http://phpmorphy.sourceforge.net/ - 그것을 찾는 데 나이가 걸렸습니다. 다른 모든 stemmers는 편집해야하며 그 후에도 Porter 알고리즘에 따라 작동하며, 이는 레마가 아닌 줄기를 생성합니다 (예 : 커뮤니티 = 공동체). Phpmorphy One은 완벽하게 잘 작동하며 설치 및 초기화가 쉽고 영어, 러시아어, 독일어, 우크라이나 및 에스토니아 사전이 있습니다. 또한 다른 사전을 컴파일하는 데 사용할 수있는 스크립트도 함께 제공됩니다. 문서는 러시아어로되어 있지만 Google 번역을 통해 사용하면 쉬워야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top