当前位置: 面试刷题>> 扩展弹性词 (经典算法题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);
```
**注意**:以上代码示例简单实现了题目要求的功能,但未完全处理所有边界情况(如标点符号紧接词汇后的情况)。在实际应用中,可能需要对输入文本进行更复杂的预处理。
**码小课**:在码小课网站上,你可以找到更多关于算法、数据结构、编程技巧等方面的精彩内容,帮助你提升编程能力和解决问题的能力。