当前位置: 首页 > news >正文

带权重的词典设计

一、词典类

public class WeightedDictionary
{
    public List<WeightedWord> Words { get; set; } = new List<WeightedWord>();
    private const int MAX_WORDS = 5000;

    public void AddWord(WeightedWord word)
    {
        var existing = Words.FirstOrDefault(w => w.Text == word.Text);
        if (existing != null)
        {
            existing.Weight += word.Weight;
        }
        else
        {
            Words.Add(word);
        }

        // 维护最大数量限制
        if (Words.Count > MAX_WORDS)
        {
            Words = Words
                .OrderByDescending(w => w.Weight)
                .Take(MAX_WORDS)
                .ToList();
        }
    }
}

public class WeightedWord
{
    [JsonProperty("text")]
    public string Text { get; set; }

    [JsonProperty("pinyin")]
    public string Pinyin { get; set; }

    [JsonProperty("weight")]
    public float Weight { get; set; } = 1.0f;

    [JsonProperty("replacements")]
    public List<string> CommonErrors { get; set; } = new List<string>();
}

二、智能权重管理

每用到一个词,*1.2来增加权重,其他词*0.98来衰减,新增的词自带1权重。

public class WeightManager
{
    // 动态权重调整
    public void UpdateWeights(string recognizedText)
    {
        foreach (var word in _dictionary.Words)
        {
            if (recognizedText.Contains(word.Text))
            {
                word.Weight *= 1.2f; // 增加当前词权重
            }
            else
            {
                word.Weight *= 0.98f; // 衰减未使用词的权重
            }
        }
    }

    // 自动清理低权重词
    public void PruneDictionary(float threshold = 0.1f)
    {
        _dictionary.Words.RemoveAll(w => w.Weight < threshold);
    }
}

三、将词典保存到本地
private void SaveDictionary() 
{ 
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmss"); 
File.Copy("active_dict.json", $"archive/dict_{timestamp}.json"); 
var json = JsonConvert.SerializeObject(_dictionary);
 File.WriteAllText("active_dict.json", json); 
} 

相关文章:

  • 【Godot4.3】Geometry2D总结
  • 基于Vue 3的智能支付二维码弹窗组件设计与实现
  • MySQL事务深度解析:ACID特性、隔离级别与MVCC机制
  • 歌词相关实现
  • Vscode工具开发Vue+ts项目时vue文件ts语法报错-红波浪线等
  • 第n小的质数(信息学奥赛一本通-1099)
  • 【每日学点HarmonyOS Next知识】获取资源问题、软键盘弹起、swiper更新、C给图片设置位图、读取本地Json
  • 为AI聊天工具添加一个知识系统 之142 设计重审 之7 “我I”:mine/own/self
  • 程序化广告行业(9/89):定义、价值与发展脉络全解析
  • 版本控制器Git(3)
  • 微信小程序校园跑腿的设计与实现【lw+源码+部署+视频+讲解】
  • uni-app打包成H5使用相对路径
  • 串口通信函数汇总-ing
  • SpringMVC执行的流程
  • 子网掩码介绍
  • 批量ip反查域名工具
  • 第十八:go 并发 goroutine
  • VScode 运行LVGL
  • 前端监测窗口尺寸和元素尺寸变化的方法
  • 【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器---tinyEasyMuduoWebServer
  • 巴基斯坦全面恢复领空开放
  • 外交部:习近平主席同普京总统达成许多新的重要共识
  • 聆听百年唐调正声:唐文治王蘧常吟诵传习的背后
  • 国家主席习近平同普京总统共见记者
  • 司法部:持续规范行政执法行为,加快制定行政执法监督条例
  • 抗战回望21︱《“良民”日记》:一个“良民”在沦陷区的见闻与感受