2012-05-09 3 views
0

맞춤 검색 엔진을 개발 중이며 각 단어를 적절한 언어 관련 형태소 분석기에 전달해야합니다.UTF8 버퍼에서 각 단어의 단어 경계와 언어를 감지합니다.

저는 최근에 UTF8 버퍼에 대해 인상적인 언어 감지 기능을 제공하는 CLD (Compact Language Detector) http://blog.mikemccandless.com/2011/10/language-detection-with-googles-compact.html을 발견했습니다.

CLD는 주어진 버퍼의 언어를 탐지하는 데 매우 유용하지만, 버퍼에서 단어 경계를 추출하고 각 단어에 대한 언어를 감지해야합니다.

아이디어가 있으십니까?

나는 기본적으로 다음을 수행 ICU 사용하여 언어 감지 엔진 개발 한
+0

정규식'\ b' 특수 문자. – kirilloid

답변

0

: ICU BreakIterator와 영어를 사용

  1. 발견 기본 "단어"(Locale::getEnglish())는
  2. 가 # 1에서 단어를 공급 규칙 다시 나에게 입력하기 때문에 점수에 의해 당신의 목적을 위해

를 정렬 "true"로 언어를 제공 내 엔진은 UTF-8, 당신은 UText을 복용 setText() 방법을 사용할 수있다 * (여기에 링크 된 예제는 거의 정확히 필요한 것입니다.하지만 UTF-8을 통과하도록 설정할 수있는 C++ API를 사용할 수도 있습니다).

+0

BreakIterator의 문제점은 설명서에 명확하게 명시된 아시아 언어에서 올바르게 작동하지 않는다는 것입니다. 또한 ICU의 언어 탐지 신뢰도는 원하는 것보다 약간 나쁩니다 (불행히도 공유 할 수없는 저의 연구 결과). –

+0

나는 당신의 게시물을 읽었습니다. 내가 위에 올린 대답은 언어 탐지기에 먹이를주기위한 '단어'추출을위한 전처리 단계로서 훌륭합니다 (제 경우에는 n-gram 엔진을 사용합니다). 멀리 CJK에 대한 경계를 파싱하는 것만 큼, 매우 복잡합니다 :) – NuSkooler

2

행운을 빌어 요 :)

솔직히,이 고급 NLP 주제이며 안정적으로 할 매우 어려운 입니다.

가장 먼저 할 일은 여러 언어로 단어 경계를 감지 할 수 없다는 것입니다. 특히 표의 언어 (중국어, 일본어, ...)에서는 토큰 화를 위해 잘 훈련 된 학습 알고리즘이 필요합니다.
누군가가 저지른 소문이 있지만 (Basis Technology 참조), 라이센스 비용을 지불 할 여유가 있다면 유용합니다.

BTW. 많은 단어가 거의 동일한 언어로 작성 될 수 있으며 신뢰할 수있는 언어 감지 기능을 사용할 수 없습니다. 그리고 문제를 악화시키기 위해 알고리즘 (대개 일부 n-gram 기반 탐지기)은 (옳거나 그른) 모든 것을 탐지하기 위해 여러 옥텟을 필요로합니다.

내가 말했듯이 행운을 빈다. 내가 너라면, 내 전략을 다시 생각해 볼거야;)

+0

Dyda : Lucene에 대한 경험이 있습니까? 나는 Lucene이 CompositeBreakIterator라는 다국어 텍스트를위한 break-in break-in을 가지고 있음을 발견했다. 믿을만한가요? – Manoj

+0

@Manoj : 솔직히 말해서, 나는 Apache Lucene과 직접 연주하지 않았다. 내가 아는 전부는 당신이 그것에 입력하는 텍스트를 정규화 할 필요가있다. 그렇지 않으면 예기치 않은 결과를 얻게 될 것이다. 또한 Google 팀 중 한 곳에서 검색 안정성에 대한 우려가 제기되었지만 유효한지 여부는 말할 수 없습니다. 심각한 연구가 필요할 수 있습니다. –

+0

@ PawełDyda 나는 devenagari 스크립트를위한 간단한 언어 탐지기를 썼다. 아이디어는'UTF8' 인코딩 된 데이터 만 받아들이고 각 문자를 반복하고 코드 포인트를 얻기 위해 디코딩합니다. 코드 포인트를 유니 코드 문자 범위와 일치시키고 그것이 속하는 언어 범위를 식별하십시오. 반복하면서, 나는 joiners와 non-joiners를 무시한다. 모든 문자가 동일한 언어 범위에 있으면 언어를보고하십시오. 다른 범위에있는 코드 포인트를 얻으면 반복이 중지됩니다. 이것은 지금까지 잘 작동합니다. 나는이 방법이 모든 non devanagari 언어에 사용될 수 있을지 궁금해하고 있었다? –

관련 문제