나는 C# 용 메타 폰 구현을 테스트하고 그 결과를 PHP의 내장 metaphone() 함수와 비교하고있다. 그러나 나는 버그를 만났고 (previously documented in PHP's issue tracker이고, a mailing list에 대해 논의했다.) 나는 내 자신의 개인적인 이익을 위해 버그 뒤에있는 C 코드를 이해하려고 노력하고있다.PHP 메타 폰 구현 버그
기본적으로 메타 폰 알고리즘에 따르면 대부분의 -gh- 인스턴스는 무음으로 렌더링되어야합니다. "라이트"의 특정 테스트 케이스에서, 나는 기대 (그리고 내 자신의 알고리즘으로 생성)
"wr" => R
"i" => ignored
"gh" => ignored
"t" => T
Result: RT
그러나 "RT"의 메타 폰 키를, PHP의 메타 폰 기능은 RFT를 반환합니다. 분명히 단어의 끝 부분에있는 것처럼 (예 : "거친") F를 F로 변환하지만, 단어 "wright"의 경우에는 -gh-가 말의 끝에 오지 마라. 다음 라인 (342)에
/* These prevent GH from becoming F */
#define NOGHTOF(c) (ENCODE(c) & 16) /* BDH */
...
/* Go N letters back. */
#define Look_Back_Letter(n) (w_idx >= n ? toupper(word[w_idx-n]) : '\0')
그리고 :
이case 'G':
if (Next_Letter == 'H') {
if (!(NOGHTOF(Look_Back_Letter(3)) || Look_Back_Letter(4) == 'H')) {
Phonize('F');
skip_letter++;
누군가가 나에게 무엇을 정확하게 NOGHTOF 기능을 이해하는 데 도움이 할 수있는 PHP 소스 배포판의 metaphone.c 파일을 보면, 나는 몇 가지 주요 사물을 그리고 왜이 코드가 -gh- in "wright"에 대해 F를 잘못 렌더링 했는가? 나는 정말로 C 녀석이 아니기 때문에 코드가 나에게 분명하지 않다.
그러면 누군가가 목록에 패치를 제출하여이 버그를 해결할 수 있습니다! –
이렇게 다음과 같은 질문이 필요합니다. –