PHP Doku:: Berechnet den Metaphone-Schlüssel eines Strings - function.metaphone.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzTextverarbeitungZeichenkettenString-Funktionenmetaphone

Ein Service von Reinhard Neidl - Webprogrammierung.

String-Funktionen

<<md5

money_format>>

metaphone

(PHP 4, PHP 5)

metaphoneBerechnet den Metaphone-Schlüssel eines Strings

Beschreibung

string metaphone ( string $str [, int $phones = 0 ] )

Errechnet den Metaphone-Schlüssel von str.

Genau wie soundex() berechnet metaphone den gleichen Schlüssel für ähnlich klingende Wörter. Die Metaphone-Funktion arbeitet genauer als soundex(), da sie die Grundregeln der englischen Aussprache kennt. Die durch metaphone erzeugten Schlüssel sind von variabler Länge.

Der Metaphone-Algorithmus wurde von Lawrence Philips <lphilips at verity dot com> entwickelt und in ["Practical Algorithms for Programmers", Binstock & Rex, Addison Wesley, 1995] beschrieben.

Parameter-Liste

str

Die Eingabezeichenkette.

phones

Rückgabewerte

Gibt den Metaphon-Schlüssel als Zeichenkette zurück.


9 BenutzerBeiträge:
- Beiträge aktualisieren...
usedformyjunk at gmail dot com
20.04.2010 8:17
I submitted my spanish metaphone version previously on 13-Oct-2005 05:44, but it was hosted on Geocities which is now gone, so it can now be found here.

Here is the link to my spanish metaphone implementation:

http://www.calvilloweb.com/spanish_metaphone.php
Vipindas K.S
9.05.2008 18:49
metaphone
=======================
The metaphone() function can be used for spelling applications.This function returns the metaphone key of the string on success, or FALSE on failure.Its main use is when you are searching a genealogy database. check to see if a metaphone search is offered. It is also useful in making/searching family tree.
Given below is a simple code that calculates and compares two strings to find whether its metaphone codes are equivalent.

html code
==========
<html>
<body>
<form action="test.php" name="test" method="get">
Name1:<input type="text" name="name1" /><br />
Name2:<input type="text" name="name2" /><br />
<input type="submit" name="submit" value="compare" />
</form>

<!--php code begins here -->

<?php
if(isset($_GET['submit']))
{
$str1 = $_GET['name1'];
$str2 = $_GET['name2'];
$meta_one=metaphone($str1);
$meta_two=metaphone($str2);
echo
"metaphone code for ".$str1." is ". $meta_one;
echo
"<br />";
echo
"metaphone code for ".$str2." is ". $meta_two."<br>";
if(
$meta_one==$meta_two)
{
echo
"metaphone codes are matching";
}
else
{
echo
"metaphone codes are not matching";
}
}
?>

</body>
</html>

Metaphone  algorithm was developed by Lawrence Philips.

Lawrence Philips' RULES follow:

 The 16 consonant sounds:
                                             |--- ZERO represents "th"
                                             |
      B  X  S  K  J  T  F  H  L  M  N  P  R  0  W  Y

 Exceptions:

   Beginning of word: "ae-", "gn", "kn-", "pn-", "wr-"  ----> drop first letter
                      "Aebersold", "Gnagy", "Knuth", "Pniewski", "Wright"

   Beginning of word: "x"                                ----> change to "s"
                                      as in "Deng Xiaopeng"

   Beginning of word: "wh-"                              ----> change to "w"
                                      as in "Whalen"

 Transformations:

   B ----> B      unless at the end of word after "m", as in "dumb", "McComb"

   C ----> X      (sh) if "-cia-" or "-ch-"
           S      if "-ci-", "-ce-", or "-cy-"
                  SILENT if "-sci-", "-sce-", or "-scy-"
           K      otherwise, including in "-sch-"

   D ----> J      if in "-dge-", "-dgy-", or "-dgi-"
           T      otherwise

   F ----> F

   G ---->        SILENT if in "-gh-" and not at end or before a vowel
                            in "-gn" or "-gned"
                            in "-dge-" etc., as in above rule
           J      if before "i", or "e", or "y" if not double "gg"
           K      otherwise

   H ---->        SILENT if after vowel and no vowel follows
                         or after "-ch-", "-sh-", "-ph-", "-th-", "-gh-"
           H      otherwise

   J ----> J

   K ---->        SILENT if after "c"
           K      otherwise

   L ----> L

   M ----> M

   N ----> N

   P ----> F      if before "h"
           P      otherwise

   Q ----> K

   R ----> R

   S ----> X      (sh) if before "h" or in "-sio-" or "-sia-"
           S      otherwise

   T ----> X      (sh) if "-tia-" or "-tio-"
           0      (th) if before "h"
                  silent if in "-tch-"
           T      otherwise

   V ----> F

   W ---->        SILENT if not followed by a vowel
           W      if followed by a vowel

   X ----> KS

   Y ---->        SILENT if not followed by a vowel
           Y      if followed by a vowel

   Z ----> S
php at casadebender dot com
27.03.2008 19:24
A double metaphone pecl module is available: http://pecl.php.net/package/doublemetaphone
altano at bigfoot dot com
24.11.2005 22:48
You can find the source code of a working example on how to use metaphones for spell checking, plus a free MySQL database dump of American English words and their metaphones at http://dubi.org/spell-checker

That should get you started on writing a spell-checker or whatever in no time.

13.10.2005 7:44
I have a forum for spanish speakers and the speller that I was using was using the metaphone function  and it didn't make a lot of sense. I looked for an equivalent  metaphone function for spanish and I never even came close to find it, so I was very happy to find the functional DoubleMetaphone().  Thanks to that function, I came up with this spanish_metaphone function.

[Editor's Note: link is updated in a later comment]
stpierre(ta)nebr]NOSPAM[wesleyan(tod)edu
9.07.2004 20:17
A C implementation of double metaphone is at http://www.cpan.org/modules/ by-authors/id/MAURICE/Text-DoubleMetaphone-0.07.tar.gz.  (Sorry I had to break that URL up; wouldn't let me post it otherwise.)  If you really need double metaphone that badly, you could roll this into your PHP build for (I would suspect) substantial performance gains.
mail at spam-off dot iaindooley dot com
16.01.2004 9:37
you can use the metaphone function quite effectively with phrases by taking the levenshtein distances between two metaphone codes, and then taking this as a percentage of the length of the original metaphone code. thus you can define a percentage error, (say 20%) and accept only matches that are closer than that. i've found this works quite effectively in a function i am using on my website where an album name that the user entered is verified against existing album names that may be similar. this is also an excellent way of people being able to vaguely remember a phrase and get several suggestions out of the database. so you could type "i stiched nine times" with an error percentage of, say, 50 and still get 'a stitch in time saves nine' back as a match.
server: zinkconsulting.com user: galen@
26.11.2003 11:18
A small warning about the double metaphone function/class implemented in php: it's slow. Very slow.

On my Mac OS X box it takes roughly 4 seconds to calculate the double_metaphone of a given string 1,000 times and set a variable to that value. Given the exact same code, the built in metaphone function takes a mere 0.03 seconds. That's a huge difference. For reference, soundex takes about 0.015 seconds.

I had dreams of ranking my person database search results with double_metaphone, but with searches yielding a few thousand results sometimes, this isn't terribly reasonable. I'm back to basic metaphone functions.

I'd suggest anyone considering the use of the double_metaphone functionality weigh the slight improvement in results with the fact it's 100 times slower than the php function metaphone. I believe this difference is probably due mostly to implementation and optimization (php code vs. optimized internal php function).

Anybody up for writing a double_metaphone function for php? Maybe php 5?
davef at getacard dot com
22.04.2000 3:52
A good reference to explain how the metaphone stuff works (and show you a working example) is:
http://www.lanw.com/java/phonetic/



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)