c#-从后缀列表中到达主要单词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#-从后缀列表中到达主要单词相关的知识,希望对你有一定的参考价值。

我有一个类似“itibarsızlaştırmak”的词。

词干是“ itibar”,后缀列表是“ a,ak,ar,ı,laş,m,sız,i”。

后缀列表丢失。 “ ma,tır,ız,i,ı,a,m,sı,mak,tı,sız,ak,ar,laş”是正确的。

我如何以后顺序列出带有后缀列表的“itibarsızlaştırmak”?

例如:itibar + suffixList [6]->itibarsız

itibar + suffixList [6] + suffixList [5]->itibarsızlaş

字词和后缀列表一直在变化。所以我需要一个算法。我尝试使用词干和比较功能一一合并后缀,但不适用于所有列表。

谢谢。

答案

使用为单词分配后缀的字典是实现此目的的一种方法。

但是需要对这段代码进行调整,以辨别列表中没有的后缀和相似的后缀(例如示例中的'a'和'ak')。

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var words = new Dictionary<string, List<string>>();
        words.Add("itibar", new List<string>(){"a", "ak", "ar", "ı", "laş", "m", "sız", "i"});

        var word = "itibarsızlaştırmak";

        var wordUsed = words.FirstOrDefault(e => word.Contains(e.Key));

        var suffixesUsedInOrder = new List<string>();
        var charsToSearch = "";

        foreach (var character in word.Substring(wordUsed.Key.Length))
        {
            var a = character.ToString();
            if (charsToSearch.Length > 0) 
            {
                a = charsToSearch + a;  
            }

            if (!wordUsed.Value.Any(e => e == a))
            {
                charsToSearch += character.ToString();
            }
            else 
            {
                suffixesUsedInOrder.Add(wordUsed.Value.FirstOrDefault(e => e == a));
                charsToSearch = "";
            }
        }

        Console.WriteLine(string.Join(",", suffixesUsedInOrder));

    }
}

此代码的运行结果:sız,laş

以上是关于c#-从后缀列表中到达主要单词的主要内容,如果未能解决你的问题,请参考以下文章

从搜索文档中查找最小片段的算法?

如果单词以后缀之一结尾则标记为1

Python:从文本文件中逐字符创建一个字符串数组[关闭]

如果我想从另一个片段中添加书签,为啥我的书签单词没有保存到 sqlite 数据库?

按后缀排序列表

编写一个程序, 将 a.txt 文件中的单词与 b.txt 文件中的 单词交替合并到 c.txt 文件中, a.txt 文件中的单词用回车符 分隔, b.txt 文件中用回车或空格进行分隔。(代码片段