0

私の目標は、文字列のデータベースを実行し、各部分文字列が発生するたびにカウントを取得することです。つまり、文字列から可能なすべての単語の組み合わせを抽出する必要があります。

たとえば、入力は"this is the first string".

"this is""is the""the first""first string""this is the""is the first""the first string""this is the first"を抽出したいと思い"is the first string"ます。

左から右に行くだけでいいのです。

どこから始めればよいかよくわかりません。データベースを読み取ってリストに保存するコードは既にありますが、スペース文字に基づいて可能なすべてのサブ文字列を抽出する方法を知る必要があります。

4

5 に答える 5

2
    List<string> WordCombinations(string phrase)
    {
        List<string> combinations = new List<string>();

        string[] words = phrase.Split();

        // We want all 2 word combinations, then 3, then 4, ...
        for (int take = 2; take < words.Length; take++)
        {
            // Start with the first word, then second, then ...
            for (int skip = 0; skip + take <= words.Length; skip++)
            {
                combinations.Add(string.Join(" ", words.Skip(skip).Take(take).ToArray()));
            }
        }

        return combinations;
    }
于 2013-01-22T13:07:19.170 に答える
2

次のメソッドは、文字列内のすべてのスペース (概念的な開始スペースと終了スペースを含む) のインデックスのリストを作成し、順序付けられたインデックスのすべてのペアの間の部分文字列を返します。

static IEnumerable<string> SpaceDelimitedSubstrings(string input)
{
    List<int> indices = new List<int> { -1 };
    int current = -1;
    while ((current = input.IndexOf(' ', current + 1)) > -1)
    {
        indices.Add(current);
    }
    indices.Add(input.Length);

    int minLength = 1;
    for (int i = 0; i < indices.Count - minLength; i++)
        for (int j = i + minLength; j < indices.Count; j++)
            yield return input.Substring(indices[i] + 1, indices[j] - indices[i] - 1);
}

次のように呼び出されます

string input = "this is the first string";
foreach (var s in SpaceDelimitedSubstrings(input))
{
    Console.WriteLine(s);
}

それは与えます

これ

に変更minLengthする2と、単一の単語の改行が切り取られます。

于 2013-01-22T13:17:03.437 に答える
0

1つの方法は次のとおりです。

myString.Split()

引数を指定しない場合、空白文字 (タブ、改行 (Environment.NewLine) など) を無視して文字列が分割されます。

すべての部分文字列があれば、それらを簡単に調べることができます。部分文字列を抽出するたびに文字列を調べる必要があるため、これは遅くなる可能性があることに注意してください。

于 2013-01-22T12:55:01.923 に答える
0

String.Split()文字列をトークンに解析するために使用できます。次に、これらのトークンを組み合わせて、必要な組み合わせを作成できます。

于 2013-01-22T12:56:54.873 に答える
0

String.Split()の使用はどうですか? 次に、すべての単一の単語があり、さらに可能な組み合わせのみが必要です。

上記のことを行う簡単なサンプル:

        string input = "this is the first string";

        var items = input.Split(' ');
        var result = new List<string>();

        // this gets only 2-word-combinations
        for (var i = 0; i < items.Count() - 1; i++)
        {
            result.Add(items[i] + " " + items[i + 1]);
        }

        // from this point: search the 3-words etc. or put this in recursion
于 2013-01-22T12:52:40.387 に答える