当前位置: 面试刷题>> 扩展弹性词 (经典算法题500道)


### 题目描述补充 **题目:扩展弹性词算法实现** 在文本处理中,我们常常需要处理一些具有“弹性”的词汇,即这些词汇的长度或形式可以根据上下文有所变化,但保持其基本的含义不变。例如,“很好”这个词,在某些情况下可以简化为“好”,或者扩展为“非常好”、“特别好”等。 **任务**: 实现一个算法,该算法接受一个基准词(如“好”)和一个包含多个扩展词的数组(如["很好", "非常好", "特别好"]),以及一个待匹配的文本字符串。算法需要找出文本中所有与基准词或其扩展词匹配的部分,并返回这些匹配项的列表。 **要求**: 1. 忽略大小写差异。 2. 匹配应尽可能精确,即如果文本中包含“好”,且同时存在“很好”,则优先匹配“很好”。 3. 如果文本中某个词是扩展词的一部分但不是完整扩展词(如“非常好好”),则不应将其视为匹配项。 ### 示例代码 #### PHP 示例 ```php function findElasticWords($text, $baseWord, $extensions) { $baseWordLower = strtolower($baseWord); $extensionsLower = array_map('strtolower', $extensions); $matches = []; // 将文本按空格分割成单词数组 $words = explode(' ', $text); // 遍历每个单词,检查是否为基准词或其扩展词 foreach ($words as $word) { $wordLower = strtolower($word); if ($wordLower === $baseWordLower) { // 如果直接匹配基准词,加入匹配列表 $matches[] = $word; } elseif (in_array($wordLower, $extensionsLower)) { // 如果匹配到扩展词,加入匹配列表 $matches[] = $word; } } return $matches; } // 示例用法 $text = "今天天气很好,心情非常好,但昨天就一般了。"; $baseWord = "好"; $extensions = ["很好", "非常好", "特别好"]; $result = findElasticWords($text, $baseWord, $extensions); print_r($result); ``` #### Python 示例 ```python def find_elastic_words(text, base_word, extensions): base_word_lower = base_word.lower() extensions_lower = [ext.lower() for ext in extensions] matches = [] # 分割文本为单词列表 words = text.split() # 遍历每个单词,检查匹配 for word in words: word_lower = word.lower() if word_lower == base_word_lower or word_lower in extensions_lower: matches.append(word) return matches # 示例用法 text = "Today the weather is very good, mood is excellent, but yesterday was just okay." base_word = "good" extensions = ["very good", "excellent", "extremely good"] result = find_elastic_words(text, base_word, extensions) print(result) ``` #### JavaScript 示例 ```javascript function findElasticWords(text, baseWord, extensions) { const baseWordLower = baseWord.toLowerCase(); const extensionsLower = extensions.map(ext => ext.toLowerCase()); let matches = []; // 分割文本为单词数组 const words = text.split(/\s+/); // 遍历每个单词,检查匹配 words.forEach(word => { const wordLower = word.toLowerCase(); if (wordLower === baseWordLower || extensionsLower.includes(wordLower)) { matches.push(word); } }); return matches; } // 示例用法 const text = "Today the weather is very good, mood is excellent, but yesterday was just okay."; const baseWord = "good"; const extensions = ["very good", "excellent", "extremely good"]; const result = findElasticWords(text, baseWord, extensions); console.log(result); ``` **注意**:以上代码示例简单实现了题目要求的功能,但未完全处理所有边界情况(如标点符号紧接词汇后的情况)。在实际应用中,可能需要对输入文本进行更复杂的预处理。 **码小课**:在码小课网站上,你可以找到更多关于算法、数据结构、编程技巧等方面的精彩内容,帮助你提升编程能力和解决问题的能力。
推荐面试题