Алгоритм разбиения на строки в контексте естественного языка - PullRequest
0 голосов
/ 22 марта 2010

У меня есть произвольно большая строка текста от пользователя, которую нужно разбить на 10 000 кусков (потенциально настраиваемое значение) и отправить в другую систему для обработки.

  • Куски не могут быть длиннее 10k (или другого произвольного значения)
  • Текст должен быть разбит с учетом контекста естественного языка
    • разделение на пунктуацию, когда это возможно
    • разбить на пробелы, если нет точки
    • разбить слово в крайнем случае

Я пытаюсь не изобретать колесо с этим, какие-либо предложения, прежде чем я начну это с нуля?

Использование C #.

Ответы [ 2 ]

2 голосов
/ 22 марта 2010

Это может не подходить для каждого случая так, как вам нужно, но оно должно помочь вам в этом.

    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 голос
/ 22 марта 2010

Я уверен, что это, вероятно, окажется сложнее, чем вы ожидаете (большинство вещей на естественном языке), но посмотрите Sharp Parser Natural Language .

В настоящее время я использую SharpNLP, он работает довольно хорошо, но всегда есть «ошибки».

Дайте мне знать, если это не то, что вы ищете.

Mark

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...