相关疑难解决方法(0)

如何将没有空格的文本拆分成单词列表?

输入: "tableapplechairtablecupboard..."很多单词

将这样的文本拆分为单词列表并得到的有效算法是什么?

输出: ["table", "apple", "chair", "table", ["cupboard", ["cup", "board"]], ...]

想到的第一件事就是要经历所有可能的单词(从第一个字母开始)并找到最长的单词,继续 position=word_position+len(word)

PS
我们列出了所有可能的单词.
单词"橱柜"可以是"杯子"和"板子",选择最长.
语言:python,但主要的是算法本身.

python algorithm text split

92
推荐指数
6
解决办法
5万
查看次数

如何在 C# 中实现 Viterbi 算法来拆分连接词?

简而言之 - 我想将这里问题的第一个答案从 Python 转换为 C#。我目前拆分连接词的解决方案是指数级的,我想要一个线性解决方案。我假设输入文本中没有间距和一致的大小写。

背景

我希望使用 C# 将诸如“wickedweather”之类的连体字符串转换为单独的词,例如“wicked weather”。我已经创建了一个有效的解决方案,一个使用指数时间的递归函数,这对于我的目的来说根本不够有效(处理至少 100 多个连接词)。到目前为止,我已经阅读了这些问题,我认为这些问题可能会有所帮助,但我无法将他们的回答从 Python 转换为 C#。

我当前的递归解决方案

这适用于只想在 C# 中拆分几个单词(< 50)并且并不真正关心效率的人。

我当前的解决方案计算出所有可能的单词组合,找到最可能的输出并显示。我目前将最可能的输出定义为使用最长单个单词的输出 - 我更喜欢使用不同的方法。这是我当前的解决方案,使用递归算法。

static public string find_words(string instring)
    {
        if (words.Contains(instring)) //where words is my dictionary of words
        {
            return instring;
        }
        if (solutions.ContainsKey(instring.ToString()))
        {
            return solutions[instring];
        }

        string bestSolution = "";
        string solution = "";

        for (int i = 1; i < instring.Length; i++)
        {
            string partOne = find_words(instring.Substring(0, i)); …
Run Code Online (Sandbox Code Playgroud)

c# string algorithm dictionary viterbi

5
推荐指数
1
解决办法
732
查看次数

标签 统计

algorithm ×2

c# ×1

dictionary ×1

python ×1

split ×1

string ×1

text ×1

viterbi ×1