2012-01-26 6 views

答えて

9

使用しています。シンプルな正規表現は、正確ではないマッチングのためにより洗練されたアルゴリズムを使用した、より大きなソリューションの一部であるかもしれません。

すぐに利用できるさまざまな英語オプションがありますが、その一部はLatin alphabetを使用する言語にかなり簡単に拡張できます。これらのアルゴリズムのほとんどは、何年も何十年もの間使用されており、十分に文書化されていますが、すべてに制限があります。

私は非ラテン文字のアルファベットにも同様のアルゴリズムがあると思いますが、その可用性について直接コメントすることはできません。

ふりがなアルゴリズム

Soundexアルゴリズムは、ほぼ100歳で、複数のプログラミング言語で実装されています。これは、文字列の発音に基づいて数値を決定するために使用されます。それは正確ではありませんが、類似する発音語/音節を識別するのに役立ちます。私はMS SQL Serverでこれを実験しましたが、PHPで利用できます。 (PHPのドキュメントを含む)

http://php.net/manual/en/function.soundex.php

一般コンセンサスが英語を扱うときMetaphoneのはSoundexのよりもはるかに正確であるということです。多くの実装が利用可能です(Wikipediaには記事の最後に長いリストがあります)。これはPHPに含まれています。

http://www.php.net/manual/en/function.metaphone.php

ダブルMetahpone単語の代替発音に対応する単語の第2の符号化をサポートします。

Metaphoneと同様に、Double Metaphoneは多くのプログラミング言語(example)で実装されています。

ワード解体

レーベンシュタイン代替スペリングを示唆するために使用することができる(例えば、ユーザ入力を正規化する)と頭韻と類韻ためのより詳細なアルゴリズムの一部として有用であるかもしれません。

http://www.php.net/manual/en/function.levenshtein.php

論理的には、それが各単語を解体することができるように、文字列内の単語のsyllabicationを理解するのに役立つだろう。音節の区切りは、2つの隣接する文字がどのように発音されるべきかについてのあいまいさを解決することができる。このスレッドはいくつかのリンクがあります。

PHP Syllable Detection

+0

このトピックに関する完全な概要はありがたいです! – Francesco

+2

+1すてきな答え!英語のレベルを持つプログラマーとして、私はあなたのリンクを掘り起こすためにスーパーポンプです! – rdlowrey

1

は、あなたは、単に短すぎると、あまりにも一般的な単語を省略し、すべての単語を反復処理テキストに頭韻を見つけ、そして彼らの初期の文字が一致している限り、それらを収集するには。

text = '' 
+'\nAs I looked to the east right into the sun,' 
+'\nI saw a tower on a toft worthily built;' 
+'\nA deep dale beneath a dungeon therein,' 
+'\nWith deep ditches and dark and dreadful of sight' 
+'\nA fair field full of folk found I in between,' 
+'\nOf all manner of men the rich and the poor,' 
+'\nWorking and wandering as the world asketh.' 

skipWords = ['the', 'and'] 
curr = [] 

text.toLowerCase().replace(/\b\w{3,}\b/g, function(word) { 
    if (skipWords.indexOf(word) >= 0) 
     return; 
    var len = curr.length 
    if (!len || curr[len - 1].charAt(0) == word.charAt(0)) 
     curr.push(word) 
    else { 
     if (len > 2) 
      console.log(curr) 
     curr = [word] 
    } 
}) 

結果:より高度な解析のために

["deep", "ditches", "dark", "dreadful"] 
["fair", "field", "full", "folk", "found"] 
["working", "wandering", "world"] 

とも類韻を見つけるために、あなたが最初の発音表記にテキストを翻訳する必要が韻を踏みます。どの言語をターゲットにしているのか、英語ではオンラインで利用可能な音声辞書があります(例:Carnegie Mellon)。ftp://ftp.cs.cmu.edu/project/fgdata/dict

関連する問題