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#-从后缀列表中到达主要单词的主要内容,如果未能解决你的问题,请参考以下文章
如果我想从另一个片段中添加书签,为啥我的书签单词没有保存到 sqlite 数据库?
编写一个程序, 将 a.txt 文件中的单词与 b.txt 文件中的 单词交替合并到 c.txt 文件中, a.txt 文件中的单词用回车符 分隔, b.txt 文件中用回车或空格进行分隔。(代码片段