2014-09-09 3 views
0

나는 폴란드어에 대한 단어의 어긋남을 만드는 프로그램을 작성 중입니다. 이 언어에서 줄기는 어떤 경우에 (구개음 화 또는 이동성/순간적 전자 및 기타 효과로 인해) 다를 수 있습니다.스템 comparsion 알고리즘

예를 들어 "karzeł"이라는 단어가 있으며 단어의 기본 사전 형식입니다. 그것은 줄기도 'karzeł'입니다. 그러나이 단어의 genitive 형태는 "karła"이고 줄기는 "karł"입니다. 우리는 여기서 'e'가 사라지고 'rz'가 'r'으로 바뀌는 것을 볼 수 있습니다. 'ZD'-> 'ździ'

내가 싶습니다

또 다른 예 :> 줄기 'uździ은'
가 교대가 -
'UZDA'-> 줄기
'uździe'을 'uzd' 사전에 줄기의 기본적인 형태 ('karzeł'와 'uzd')를 저장하고 내 줄기 'karł'또는 'uździ'에 넣을 때 적절한 기본 줄기를 찾습니다. 교대는 줄기 끝에서만 일어나며 최대 4자를 포함합니다.

이를 수행 할 수있는 알고리즘이 있습니까? Levensthein 거리는 모든 글자를 동등하게 취급합니다. 따라서 'barzeł'이라는 단어를 입력하면 'karzeł'을 줄이는 거리가 'karł'을 줄이는 것보다 적습니다.

신경망에 대해서도 생각했지만 단어를 인코딩하는 방법을 모르겠다.

또 다른 아이디어는 역전 된 것과 같은 것을 만드는 알고리즘을 작성하고 가능한 줄기를 만들어 사전에서 찾으려고합니다.

나는 줄기의 기본적인 형태 만 저장하고 그 밖의 모든 것들은 즉석에서 만들고 싶다는 점을 강조하고 싶습니다.

+1

levenshtein distance는 일부 문자 나 문자 시퀀스에 더 많은 가중치를 주도록 사용자 정의 할 수 있습니다. – Pierre

답변

1

우선, 나는 폴란드 형태에 관한 많은 프로젝트를 보았던 것을 기억합니다. 그래서 나는 당신의 것을 시작하기 전에 먼저 그것들을 볼 것입니다.

Levenshtein과 관련하여 Pierre가 주석에서 올바르게 언급했듯이 거리 함수를 사용자 정의 할 수 있습니다. 그리고 그것은 있어야합니다. Levenshtein을 알고리즘의 알고리즘으로 생각하지 말고, 특정 오류 모델에 대한 해결책으로 생각해보십시오. 먼저 그는 단어를 타이핑 할 때 임의의 프로세스 (손가락이 오른쪽 키를 누르지 않음)로 인해 모든 글자를 떨어 뜨리거나 다른 글자로 대체 할 수 있다고 말하는 모델을 제안합니다. 그런 다음,이 알고리즘은이 모델에서 최대 우도 솔루션의 생성기 일뿐입니다. 허용하는 오류가 많을수록 오류 발생 순서가 작을수록 점수가 커집니다.

당신은 매우 다른 가설을 내포하고 있습니다. 그 폴란드어 줄기는 결국 유연성을 가질 수 있습니다 (이 틀 내에서 완전히 이해할 수없는 언어 과정). 그런 다음 접미어 (또는 하나 인 것처럼 보이는 부분)를 벗길 때 다음 세 가지 옵션이 있습니다. 1) 여기에있는 것은 다른 형태의 줄기이거나 사전에 저장된 입니다. 2) 완전히 다른 줄기 또는 3) 접미사를 부적절하게 벗긴 것이고 가지고있는 것은 줄기가 아닙니다. 추정치의 시작 부분에 몇 개의 사전 항목과 일치하는 문자가 몇 개인 지 (예 : 이러한 항목을 찾는 방법은 관련 있지만 다른 질문 임) 확인하여 이러한 가능성을 추론 할 수 있습니다. 그런 다음 메트릭/추론에 따라 가장 그럴듯한 추측을 선택할 수 있습니다.

이제 임의의 알고리즘을 사용하여 사전에서 후보를 찾을 수 있습니다. Levenshtein 알고리즘 포함 - 적합한 알고리즘이 선택되었다고 합리적으로 확신 할 수있는 한.하지만 분명히 자신의 통계를 따르거나 에뮬레이션하는 사전 검색 알고리즘을 작성하는 것이 좋습니다. 예를 들어, 단어의 시작 부분에 글자를 변경하는 데 가장 큰/금지 된 비용을주고 마지막 단계로 갈수록 줄입니다.