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”
例如“邓小平”
单词开头为“wh-”----> 改为“w”
例如“Whalen”
转换规则
B ----> B 除非在“m”之后单词结尾,例如“dumb”,“McComb”
C ----> X (sh) 如果包含“-cia-” 或 “-ch-”
S 如果包含“-ci-”,“-ce-” 或 “-cy-”
SILENT (静音) 如果包含“-sci-”,“-sce-” 或 “-scy-”
K 其他情况,包括“-sch-”
D ----> J 如果包含“-dge-”,“-dgy-” 或 “-dgi-”
T 其他情况
F ----> F
G ----> SILENT (静音) 如果包含“-gh-” 且不在单词结尾或元音之前
在“-gn”或“-gned”中
在“-dge-”等中,如同上规则
J 如果在“i”,“e”或“y”之前,且不是双“gg”
K 其他情况
H ----> SILENT (静音) 如果在元音之后且没有元音跟随
或者在“-ch-”,“-sh-”,“-ph-”,“-th-”,“-gh-”之后
其他情况为H
J ----> J
K ----> SILENT (静音) 如果在“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”之前
SILENT (静音) 如果包含“-tch-”
T 其他情况
V ----> F
W ----> SILENT (静音) 如果后面没有元音
W 如果后面有元音
X ----> KS
Y ----> SILENT (静音) 如果后面没有元音
Y 如果后面有元音
Z ----> S