2012-01-26 13 views
7

खोजने के लिए दो तारों की तुलना करना दो तारों की तुलना करने के लिए अलगाव और आकलन खोजने के लिए संभव होगा?RegEx: एलीटेशन और असोनेंस

मैं मुख्य रूप से JavaScript या PHP

उत्तर

9

मुझे यकीन है कि एक regex एक मजबूत तुलना उपकरण के निर्माण के लिए सबसे अच्छा तरीका हो सकता है नहीं कर रहा हूँ का उपयोग करें। एक साधारण रेगेक्स एक बड़े समाधान का हिस्सा हो सकता है जो गैर-सटीक मिलान के लिए अधिक परिष्कृत एल्गोरिदम का उपयोग करता है।

अंग्रेजी के लिए कई प्रकार के आसानी से उपलब्ध विकल्प हैं, जिनमें से कुछ को Latin alphabet का उपयोग करने वाली भाषाओं में काफी आसानी से बढ़ाया जा सकता है। इनमें से अधिकतर एल्गोरिदम वर्षों या यहां तक ​​कि दशकों तक रहे हैं और अच्छी तरह से प्रलेखित हैं, हालांकि उनमें सभी की सीमाएं हैं।

मुझे कल्पना है कि गैर-लैटिन वर्णमाला के लिए समान एल्गोरिदम हैं लेकिन मैं उनकी उपलब्धता पर पहले से टिप्पणी नहीं कर सकता।

ध्वन्यात्मक एल्गोरिदम

Soundex एल्गोरिथ्म लगभग 100 साल पुराना है और कई प्रोग्रामिंग भाषाओं में लागू किया गया है। यह एक स्ट्रिंग के उच्चारण के आधार पर एक संख्यात्मक मान निर्धारित करने के लिए प्रयोग किया जाता है। यह सटीक नहीं है लेकिन यह समान ध्वनि शब्दों/अक्षरों को पहचानने के लिए उपयोगी हो सकता है। मैंने एमएस एसक्यूएल सर्वर में इसका प्रयोग किया है और यह PHP में उपलब्ध है।

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

(पीएचपी डॉक्स सहित) सामान्य सहमति है कि metaphone जब अंग्रेजी भाषा के साथ काम कर Soundex की तुलना में काफी अधिक सटीक है। कई कार्यान्वयन उपलब्ध हैं (लेख के अंत में विकिपीडिया की एक लंबी सूची है) और इसे PHP में शामिल किया गया है।

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

डबल Metahpone एक शब्द शब्द का एक वैकल्पिक उच्चारण करने के लिए इसी की एक दूसरी एन्कोडिंग का समर्थन करता।

मेटाफोन के साथ, कई प्रोग्रामिंग भाषाओं में डबल मेटाफोन लागू किया गया है (example)।

वर्ड डीकंस्ट्रक्शन

(उदाहरण के लिए, उपयोगकर्ता इनपुट को सामान्य बनाने में)

Levenshtein वैकल्पिक वर्तनी सुझाव देने के लिए इस्तेमाल किया जा सकता और अनुप्रास और स्वरों की एकता के लिए एक और सुव्यवस्थित एल्गोरिथ्म के भाग के रूप में उपयोगी हो सकता है।

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

तार्किक रूप से, यह स्ट्रिंग में शब्दों की शब्दांशों में विभाग को समझने के लिए करें ताकि प्रत्येक शब्द deconstructed किया जा सकता है में मदद मिलेगी। अक्षरों का ब्रेक अस्पष्टता को हल कर सकता है कि कैसे दो आसन्न अक्षरों का उच्चारण किया जाना चाहिए। यह धागा कुछ लिंक है:

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"] 

अधिक उन्नत पार्स करने के लिए है और यह भी assonances खोजने के लिए और राइम आप पहली बार ध्वन्यात्मक वर्तनी में एक पाठ का अनुवाद करने के लिए। आपने यह नहीं कहा कि आप किस भाषा को लक्षित कर रहे हैं, अंग्रेजी के लिए कुछ फोनेटिक शब्दकोश ऑनलाइन उपलब्ध हैं, उदाहरण के लिए कार्नेगी मेलॉन: ftp://ftp.cs.cmu.edu/project/fgdata/dict