You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文本中获取次高频单词?现有代码修改后无法生效

问题分析与解决方案

原代码能获取最高频单词,但尝试通过修改highestFreq为freq+1来获取次高频的方法完全错误——次高频是所有单词频率中第二大的数值,不是当前最高频率加1,而且原逻辑只维护了单个最高值,没有记录所有频率的分布。

另外原代码存在一个明显bug:var message = string.Join(" ", source);会把输入字符串的每个字符用空格分隔(比如输入"test code"会变成"t e s t c o d e"),导致后续分割出来的都是单个字符,完全不符合统计单词的需求,这行代码应该直接删除,用原始输入字符串进行分割。

修正后的实现思路

  1. 先完整统计所有符合条件(长度>4)的单词的出现频率
  2. 将统计结果按频率降序排序
  3. 从排序后的结果中提取最高频和次高频单词(需处理输入中符合条件的单词不足2个的边界情况)

修正代码示例

string inputText = TextBox1.Text;
var splitChars = new char[] { ' ', '.' };
var words = inputText.Split(splitChars, StringSplitOptions.RemoveEmptyEntries);

// 统计符合条件的单词频率
var frequencies = new Dictionary<string, int>();
foreach (var word in words)
{
    var trimmedWord = word.Trim();
    if (trimmedWord.Length > 4)
    {
        if (frequencies.ContainsKey(trimmedWord))
        {
            frequencies[trimmedWord]++;
        }
        else
        {
            frequencies[trimmedWord] = 1;
        }
    }
}

// 按频率降序排序,同时保留单词和频率
var sortedFrequencies = frequencies.OrderByDescending(kv => kv.Value).ToList();

// 获取最高频和次高频单词
string highestWord = sortedFrequencies.Count > 0 ? sortedFrequencies[0].Key : null;
string secondHighestWord = sortedFrequencies.Count > 1 ? sortedFrequencies[1].Key : null;

// 输出到Label
Label1.Text = highestWord ?? "无符合条件的单词";
// 如果需要显示次高频,可以添加另一个Label或者拼接文本
// Label2.Text = secondHighestWord ?? "无次高频单词";

关键说明

  • 先完成全量统计再排序:这样能完整获取所有单词的频率分布,方便提取任意排名的高频单词
  • 处理边界情况:当符合条件的单词数量为0或1时,避免索引越界错误
  • 修复了原代码中错误的字符串拆分逻辑:直接用原始输入分割,去掉多余的string.Join操作

内容的提问来源于stack exchange,提问作者user20465780

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:35:18