metaphone
=======================
metaphone() 函数可用于拼写应用程序。此函数在成功时返回字符串的 metaphone 键,在失败时返回 FALSE。它的主要用途是在您搜索家谱数据库时。检查是否提供 metaphone 搜索。它在制作/搜索家谱时也很有用。
下面是一个计算和比较两个字符串以查找其 metaphone 代码是否相等的简单代码。
html 代码
==========
<html>
<body>
<form action="test.php" name="test" method="get">
名称 1:<input type="text" name="name1" /><br />
名称 2:<input type="text" name="name2" /><br />
<input type="submit" name="submit" value="比较" />
</form>
<!--php 代码从此处开始 -->
<?php
if(isset($_GET['submit']))
{
$str1 = $_GET['name1'];
$str2 = $_GET['name2'];
$meta_one=metaphone($str1);
$meta_two=metaphone($str2);
echo "metaphone 代码为 ".$str1." 是 ". $meta_one;
echo "<br />";
echo "metaphone 代码为 ".$str2." 是 ". $meta_two."<br>";
if($meta_one==$meta_two)
{
echo "metaphone 代码匹配";
}
else
{
echo "metaphone 代码不匹配";
}
}
?>
</body>
</html>
Metaphone 算法由 Lawrence Philips 开发。
Lawrence Philips 的规则如下
16 个辅音
|--- ZERO 代表“th”
|
B X S K J T F H L M N P R 0 W Y
异常
单词开头: "ae-", "gn", "kn-", "pn-", "wr-" ----> 删除第一个字母
"Aebersold", "Gnagy", "Knuth", "Pniewski", "Wright"
单词开头: "x" ----> 更改为 "s"
例如 "Deng Xiaopeng"
单词开头: "wh-" ----> 更改为 "w"
例如 "Whalen"
转换
B ----> B 除非在 "m" 之后,单词结尾,例如 "dumb", "McComb"
C ----> X (sh) 如果 "-cia-" 或 "-ch-"
S 如果 "-ci-", "-ce-", 或 "-cy-"
静音如果 "-sci-", "-sce-", 或 "-scy-"
否则为 K,包括 "-sch-"
D ----> J 如果在 "-dge-", "-dgy-", 或 "-dgi-" 中
否则为 T
F ----> F
G ----> 静音如果在 "-gh-" 中并且不在结尾或元音之前
在 "-gn" 或 "-gned" 中
在 "-dge-" 等中,如上述规则
J 如果在 "i" 之前,或 "e" 之前,或 "y" 之前,如果 "gg" 不重复
否则为 K
H ----> 静音如果在元音之后,并且没有元音跟随
或在 "-ch-", "-sh-", "-ph-", "-th-", "-gh-" 之后
否则为 H
J ----> J
K ----> 静音如果在 "c" 之后
否则为 K
L ----> L
M ----> M
N ----> N
P ----> F 如果在 "h" 之前
否则为 P
Q ----> K
R ----> R
S ----> X (sh) 如果在 "h" 之前或在 "-sio-" 或 "-sia-" 中
否则为 S
T ----> X (sh) 如果 "-tia-" 或 "-tio-"
0 (th) 如果在 "h" 之前
静音如果在 "-tch-" 中
否则为 T
V ----> F
W ----> 静音如果后面没有元音
W 如果后面是元音
X ----> KS
Y ----> 静音如果后面没有元音
如果后面跟着元音,则为 Y
Z ----> S