• 搜索引擎研究-如何分词-高级分词-基础分词后组合复合词汇


    最近测试搜索引擎,发现用基本词汇分词出来在索引检索会有检索词汇被细分,造成检索到的文章是七零八落的字组成的,经过几天分析,发现通过在基础词汇分词的基础上,再组合分词会巨大的提高新词发现率,词语发现准确率,完整词汇发现率。

    在基础分词后,组合分词算法如下:


    func RelaToWordList(rela map[string]*WordRelaInfo) (relawordls []string) {
        for w1, rela1 := range rela {
            if w1 == "的" || w1 == "是" || w1 == "了" {
                w1 = ""
            }
            for w2, rela2 := range rela1.next {
                bshow3 := false
                maxcnt3 := 0
                for w3, rela3 := range rela2.next {
                    bshow4 := false
                    maxcnt4 := 0
                    for w4, rela4 := range rela3.next {
                        bshow5 := false
                        maxcnt5 := 0
                        for w5, rela5 := range rela4.next {
                            if rela5.cnt > 1 {
                                relawordls = append(relawordls, w1+w2+w3+w4+w5)
                                bshow5 = true
                                if rela5.cnt > maxcnt4 {
                                    maxcnt5 = rela5.cnt
                                }
                            }
                        }
                        if bshow5 == false /*|| rela4.cnt > maxcnt5*/ {
                            if rela4.cnt > 1 {
                                relawordls = append(relawordls, w1+w2+w3+w4)
                                bshow4 = true
                                if rela4.cnt > maxcnt4 {
                                    maxcnt4 = rela4.cnt
                                }
                            }
                        }
                        if maxcnt5 > maxcnt4 {
                            maxcnt4 = maxcnt5
                        }
                    }
                    if bshow4 == false /*|| rela3.cnt > maxcnt4*/ {
                        if rela3.cnt > 1 {
                            relawordls = append(relawordls, w1+w2+w3)
                            bshow3 = true
                        }
                    }
                    if maxcnt4 > maxcnt3 {
                        maxcnt3 = maxcnt4
                    }
                }
                if bshow3 == false /*|| rela2.cnt > maxcnt3*/ {
                    if rela2.cnt > 1 {
                        if w1 != "" {
                            relawordls = append(relawordls, w1+w2)
                        }
                    }
                }
            }
        }
        return relawordls
    }
     

  • 相关阅读:
    消失的遗传力的进一步剖分及应用
    第二章Redis概述安装
    LabVIEW进行MQTT通信及数据解析
    解决错误代码0x80070422的多种方法及预防措施
    猫头虎解析:深入浅出cURL命令和HTTP请求
    SAP ABAP结构与内表的创建
    机器学习笔记(二)回归
    C语言入门课程学习笔记2
    第九章 动态规划 part14 1143. 最长公共子序列 1035. 不相交的线 53. 最大子序和
    leetcode热题100学习计划-链表-反转链表
  • 原文地址:https://blog.csdn.net/suirosu/article/details/128156384