Помогите пожалуйста запустить данный код в своём коде:
Тут одна функция вызывает остальные две. Я так понимаю их нужно как-то склеить.
Код:
namespace NLP.Tokenizer
{
public class Tokenizer
{
private int start = 0;
//Основной метод. Принимает на текст, и возвращает список отдельных предложений
public List<string> SplitText(string text)
{
List<string> resultSenteces = new List<string>();
bool flag = true;
start = GetPointIndex(text.Substring(start));
//Цикл работает до тех пор, пока не будет получено последнее предложение.
// После чего флаг устанавливается в false
while (flag)
{
start = GetPointIndex(text);
if (start != text.Length)
{
//Сохраняем предложение в списке. Обновляем текст. Теперь он не будет
//содержать сохраненное предложение, что позволит сокращать время
//работы с каждой итерацией.
resultSenteces.Add((text.Substring(start - start, start + 1)));
text = text.Substring(start + 1);
}
else
{
resultSenteces.Add(text);
flag = false;
}
}
return (SentecesJoiner(resultSenteces));
}
//Метод, склеивающий "ложные" предложения с реальным предложением,
//то есть находятся очень короткие предложения, которые зачастую
//являются сокращениями "т.е." и так далее.
private List<string> SentecesJoiner(List<string> sentences )
{
List<string> shortWords = new List<string>();
string result = "";
foreach (string sentence in sentences)
{
if(sentence.Length <= 4 && sentence != "")
{
shortWords.Add(sentence);
}
}
foreach (string word in shortWords)
{
result = sentences[sentences.IndexOf(word) - 1] + word + sentences[sentences.IndexOf(word) + 1];
sentences.Insert(sentences.IndexOf(word) + 2, result);
sentences.RemoveRange(sentences.IndexOf(word) - 1, 3);
}
sentences.Remove("");
return sentences;
}
//Метод нахождения ближайшего знака препинания.
private int GetPointIndex(string text)
{
//Сохраняем индексы ближайших знаков в массив, затем сортируем его.
//Это позволит извлекать индекс ближайшего знака.
List<int> result = new List<int>{text.IndexOf('.'), text.IndexOf('!'), text.IndexOf('?')};
result.Sort();
if (result[0] >= 0)
{
return result[0];
}
else if (result[1] >= 0)
{
return result[1];
}
else if (result[2] >= 0)
{
return result[2];
}
return text.Length;
}
}
}