2011-04-12 3 views
9

저는 한 단어를 PHP로 음절로 나눌 수있는 방법을 찾고 싶습니다. 예를 들어, "nevermore"라는 단어가 detect_syllables()를 통해 실행되면 "nev-er-more"가 반환됩니다. 좋은 API가 있습니까?PHP 음절 탐지

+1

관련 질문에 대한 http://stackoverflow.com/questions/1271918/ruby-count-syllables에는 PHP를 사용하는 기능에 대한 몇 가지 좋은 지침이 있습니다. – Fanis

답변

13

매우 정확한 알고리즘을 설명하는 유용한 PHd thesis paper by Frank Liang이 있습니다. 25 년 전에 작성되었지만 여전히 유효합니다. 하지만 PHP의 모든 구현을 잘 모르는 것 같아요

빠른 구글이 (다른 가독성 측정 알고리즘 중) 단어 내에서 계산 음절에 대한 알고리즘을 포함 PHP,의 Text Statistics library이 링크를 확인했다 EDIT

. 여기서 음절 분할 코드를 찾을 수 있어야합니다.

+0

실제로 음절을 세지 않고 실제로 음절을 세는 펑크 턴이 있다는 것을 이해하십시오. – jeremy

+2

실제 코드를 보지 않은 동안 : 음절을 계산할 수 있으면 단어를 음절로 분할하여 그 수를 계산해야하므로 논리가 어딘가에 있어야합니다. –

5

저는 프랭크 리앙 (Frank Liang)의 알고리즘과 TeX 사전을 기반으로 PHP 하이페 네이터 클래스를 만드는 단계를 실제로 마쳤습니다. 모든 Office 제품군에서 사용되는 앱스 (appoach) 인 것 같습니다. (실제로 이미 찍은 적이없는 좋은 이름을 찾는 중에 실제로이 주제를 발견했습니다.) ­ 엔티티에 대한 브라우저 지원이 서서히 향상됨에 따라 웹 사이트의 콘텐츠를 하이픈으로 연결하는 것이 현실적인 옵션이되었습니다.

핵심 기능이 작동 중입니다. TeX 하이픈 사전을 파싱하고, 파싱 된 사전을 캐시하며, 텍스트 및/또는 HTML을 분리 (따라서 계산) 및/또는 하이픈 처리합니다. 일부 계획 기능은 여전히 ​​누락되었지만 사용하지 못하게하는 기능은 없습니다. 또한 좋은 문서, 샘플, 정식 unittest 또는 허영심 사이트가 없습니다.

나는 그것에 대해 github 사이트를 만들었으며 here을 최대한 빨리 게시 할 예정이므로 며칠 후에 다시 확인하십시오.

네덜란드어 (모국어)와 미국 영어로만 테스트 했으므로 다른 문자 집합을 사용하는 언어에는 여전히 문제가있을 수 있습니다.

+0

니스! 정말 끝내주는 군. 다시 확인해 보겠습니다. – jeremy

+2

@ martijn-van-der-lee - https://github.com/heiglandreas/Org_Heigl_Hyphenator를 방문하십시오 - 아마도 우리는 힘을 합칠 수 있습니다;) – heiglandreas

2

프랭크 리앙 (Frank Liang)의 논문은 음절 탐지가 아니라 하이픈으로 표시되어 있습니다. 또한 그의 논문 논문 자체는 그가 사용한 사전에 대한 성공률이 약 89 %라고 말하고 있으며, 이는 누구나 충분히 만족스럽지 않을 것입니다. 실제로 보이는 모든 단어 하나 하나를 수동으로 대체 할 수있는 대체 방법은 없습니다. 그것을하기 위해 완전한 일대일 조회 테이블 단어 목록을 요구하는 것은 효율적이지 않지만 요즘의 저장 공간은 CPU 시간보다 훨씬 저렴합니다.

아마도 많은 사용자가 모든 알려진 단어에 대해 솔루션을 제공하도록 요청할 수 있도록 CAPTCHA 형 서비스를 만드는 것으로 생각할 수 있습니다. 결과를 서로 대조하여 한 사람이 모든 것을 수행 할 필요가 없도록합니다. 그들 자신. 일단 결과가 완성되면 자유롭게 발표되기를 바랍니다.

+0

Frank Liang의 논문은 TeSX - 하이픈 - 패턴과 Liang의 요점 중 하나는 자동 생성 된 패턴이 더 나은 성공률을 만들기 위해 확장되어야한다는 것입니다. 이것은 TeX-Hyphenation-Patterns로 수행되었습니다.다른 패턴 또는 사전 기반 알고리즘이 있지만 오픈 소스가 아닙니다 (예 : DIHYPH). – heiglandreas