代码之家  ›  专栏  ›  技术社区  ›  Chris Ballance

基于自然语言上下文的字符串分块算法

  •  0
  • Chris Ballance  · 技术社区  · 14 年前

    • 块的长度不能超过10k(或其他任意值)
    • 文本应与自然语言语境相结合
      • 尽可能使用标点符号
      • 如果不存在穿孔,则在空格上拆分

    我不想用这个重新发明轮子,在我从头开始之前有什么建议吗?

    使用C#。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Scott J    14 年前

    这也许不能处理每一个你需要的案件,但它应该让你的方式。

        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;
        }
    
        2
  •  1
  •   MStodd    14 年前

    我相信这最终可能会比你预期的更困难(大多数自然语言的事情),但是请看 Sharp Natural Language Parser .

    我目前正在使用SharpNLP,它工作得很好,但是总是有“gotcha's”。

    让我看看这不是你要找的。

    作记号