2010-04-29 16 views
7

इस स्ट्रिंग को एक उदाहरण के रूप में लें: "कल आपको लंदन में और केंट दिन के बाद देखेंगे"।php - मैं स्ट्रिंग को अपने कीवर्ड की एक एसोसिएटिव सरणी में कैसे परिवर्तित करूं

मैं एक साहचर्य सरणी है कि कुंजी के रूप में खोजशब्द शामिल करने के लिए इस बदल जाएगा, जबकि अधिमानतः आम शब्दों से वंचित कर देते हैं:

सरणी ([कल] => 2 [लंदन] => 1 [ केंट] => 1)

किसी भी मदद की बहुत सराहना की।

उत्तर

0

का उपयोग कर शब्दों का एक काली सूची मेरे लिए उपवास रखने की

$str = 'will see you in London tomorrow and Kent the day after tomorrow'; 
$skip_words = array('in', 'the', 'will', 'see', 'and', 'day', 'you', 'after'); 
// get words in sentence that aren't to be skipped and count their values 
$words = array_count_values(array_diff(explode(' ', $str), $skip_words)); 

print_r($words); 
7

मैं कहूंगा कि आप:

  • जटिलता आप अपने शब्दों के लिए स्वीकार करेंगे पर निर्भर करता है explode
  • या preg_split
  • साथ शब्द
    • की एक सरणी में स्ट्रिंग विभाजित विभाजक
  • हमें ई array_filte आर केवल लाइनों को रखने के लिए (यानी।शब्द) आप चाहते हैं
    • कॉलबैक फ़ंक्शन सभी गैर वैध-शब्द
  • और, फिर, शब्दों के परिणामस्वरूप सूची पर array_count_values का उपयोग के लिए रिटर्न फाल्स करना होगा
    • की गणना होती है जो कितनी बार प्रत्येक शब्द शब्द की सरणी में मौजूद है



संपादित करें: और, सिर्फ मनोरंजन के लिए, यहाँ एक त्वरित उदाहरण है:

सबसे पहले, स्ट्रिंग, कि शब्दों में विस्फोट हो जाता है:

$str = "will see you in London tomorrow and Kent the day after tomorrow"; 
$words = preg_split('/\s+/', $str, -1, PREG_SPLIT_NO_EMPTY); 
var_dump($words); 

जो तुम हो जाता है :

array 
    0 => string 'will' (length=4) 
    1 => string 'see' (length=3) 
    2 => string 'you' (length=3) 
    3 => string 'in' (length=2) 
    4 => string 'London' (length=6) 
    5 => string 'tomorrow' (length=8) 
    6 => string 'and' (length=3) 
    7 => string 'Kent' (length=4) 
    8 => string 'the' (length=3) 
    9 => string 'day' (length=3) 
    10 => string 'after' (length=5) 
    11 => string 'tomorrow' (length=8) 


फिर, filteting:

function filter_words($word) { 
    // a pretty simple filter ^^ 
    if (strlen($word) >= 5) { 
     return true; 
    } else { 
     return false; 
    } 
} 
$words_filtered = array_filter($words, 'filter_words'); 
var_dump($words_filtered); 

कौन सा आउटपुट:

array 
    4 => string 'London' (length=6) 
    5 => string 'tomorrow' (length=8) 
    10 => string 'after' (length=5) 
    11 => string 'tomorrow' (length=8) 


और अंत में, उनकी गिनती:

$counts = array_count_values($words_filtered); 
var_dump($counts); 

और अंतिम परिणाम:

array 
    'London' => int 1 
    'tomorrow' => int 2 
    'after' => int 1 


अब, आप पर निर्भर यहां से ;-)
मुख्य रूप से निर्माण करने के लिए, आप पर काम करना होगा:

  • एक बेहतर विस्फोट समारोह, कि ponctuation के साथ सौदों (या के दौरान उस के साथ सौदा छानने)
  • एक "बुद्धिमान" छानने समारोह, कि अपनी आवश्यकताओं से बेहतर मेरा

मज़ा सूट!

+0

शामिल नहीं होना। फिर से स्कूप्ड – dnagirl

+0

'str_word_count' भी दिलचस्प हो सकता है: http://www.php.net/manual/en/function.str-word-count.php –

+0

धन्यवाद जो काम करता है। क्या "int" के बिना अंतिम परिणाम प्राप्त करना संभव है? अर्थात।बस अपने – Steven

1

आपके पास सामान्य शब्दों की एक तालिका हो सकती है, फिर एक समय में अपनी स्ट्रिंग एक शब्द से गुज़रें, जांचें कि यह तालिका में मौजूद है या नहीं, तो इसे अपने सहयोगी सरणी में जोड़ें, या इसे +1 करें पहले से ही मौजूद है।

संबंधित मुद्दे