具有自然语言上下文的字符串分块算法

时间:2010-03-22 18:37:50

标签: c# string nlp

我有一个来自用户的任意大的文本字符串,需要分成10k块(可能是可调整的值)并发送到另一个系统进行处理。

  • Chunks不能超过10k(或其他任意值)
  • 文本应该考虑到自然语言环境
    • 尽可能分割标点符号
    • 如果不存在功能,则拆分空格
    • 作为最后的手段打破一个字

我试图不用这个重新发明轮子,在我从头开始滚动之前有任何建议吗?

使用C#。

2 个答案:

答案 0 :(得分:2)

这可能无法根据您的需要处理每一个案例,但它应该让您继续前进。

    public IList<string> ChunkifyText(string bigString, int maxSize, char[] punctuation)
    {
        List<string> results = new List<string>();

        string chunk;
        int startIndex = 0;

        while (startIndex < bigString.Length)
        {
            if (startIndex + maxSize + 1 > bigString.Length)
                chunk = bigString.Substring(startIndex);
            else
                chunk = bigString.Substring(startIndex, maxSize);

            int endIndex = chunk.LastIndexOfAny(punctuation);

            if (endIndex < 0)
                endIndex = chunk.LastIndexOf(" ");

            if (endIndex < 0)
                endIndex = Math.Min(maxSize - 1, chunk.Length - 1);

            results.Add(chunk.Substring(0, endIndex + 1));

            startIndex += endIndex + 1;
        }

        return results;
    }

答案 1 :(得分:1)

我确信这可能会比你期望的更困难(最自然的语言),但请查看Sharp Natural Language Parser

我目前正在使用SharpNLP,它运行得很好,但总是有“陷阱”。

如果这不是你想要的,请告诉我。

标记