C#,动态规划问题中基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法与源代码

1 分词

分词是自然语言处理的基础,分词准确度直接决定了后面的词性标注、句法分析、词向量以及文本分析的质量。英文语句使用空格将单词进行分隔,除了某些特定词,如how many,New York等外,大部分情况下不需要考虑分词问题。但有些情况下,没有空格,则需要好的分词算法。

简单的分词算法主要有:

2 正向最大匹配

从左到右尽可能划分出一段连续字符,使得其等于词典中的某个词,然后将这段连续字符提取出来,对余下的部分进行同样的操作。如果第一个字符不是词典中任何一个词的前缀,那么这个字符单独作为一个词。

3 逆向最大匹配

跟正向最大匹配的唯一不同是从右到左尽可能划分出一段连续字符。

4 双向最大匹配

歧义指对于一个句子有多个分词结果。汉语文本中 90.0%左右的句子,FMM 和 BMM 的切分完全重合且正确,9.0%左右的句子 FMM 和 BMM 切分不同,但其中必有一个是正确的(歧义检测成功),只有不到1.0 %的句子,或者 FMM 和 BMM 的切分虽重合却是错的,或者FMM 和 BMM 切分 不同但两个都不对(歧义检测失败)。
 

本文介绍了基于单词搜索树(Trie Tree)的单词断句分词( Word Breaker)算法及其源代码。

5 节点信息

public class TrieNode
{
    public TrieNode[] children { get; set; } = new TrieNode[26];

    // isEndOfWord is true if the node represents
    // end of a word
    public bool isEndOfWord { get; set; } = false;

    public TrieNode()
    {
        isEndOfWord = false;
        for (int i = 0; i < 26; i++)
        {
            children[i] = null;
        }
    }
}

public class TrieNode
{
    public TrieNode[] children { get; set; } = new TrieNode[26];

    // isEndOfWord is true if the node represents
    // end of a word
    public bool isEndOfWord { get; set; } = false;

    public TrieNode()
    {
        isEndOfWord = false;
        for (i

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 11:38:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 11:38:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 11:38:01       87 阅读
  4. Python语言-面向对象

    2024-03-17 11:38:01       97 阅读

热门阅读

  1. 码云使用 创建项目

    2024-03-17 11:38:01       45 阅读
  2. 比特币,区块链及相关概念简介(三)

    2024-03-17 11:38:01       44 阅读
  3. 容器只适用于微服务吗?

    2024-03-17 11:38:01       38 阅读
  4. docker的基本知识点

    2024-03-17 11:38:01       39 阅读
  5. stm32_f103c8点亮led(01)

    2024-03-17 11:38:01       43 阅读
  6. 1.AD域控如何强制删除不可以用域控服务器

    2024-03-17 11:38:01       38 阅读
  7. 如何调整服务器系统时间

    2024-03-17 11:38:01       42 阅读