Я столкнулся с той же ошибкой.Сали Ху имеет актуальный правильный ответ. Это не ответ о том, как найти или использовать ISentenceSplitter
;однако он показывает, как пример приложения Proxem разделяет предложения как часть более крупного процесса.
Пример приложения, поставляемого с библиотеками, может разбивать предложения, поэтому я решил, что код допускает это.Прочитав немного кода, я обнаружил, что в их примере используется класс Proxem.Antelope.Document
для разбиения предложений и синтаксического разбора.Вместо того, чтобы декомпилировать библиотеки, чтобы увидеть, как кишки конструктора Document
используют ISentenceSplitter
(я вполне уверен, что он это делает), я просто использовал класс, и он фактически завершил выполнение всех необходимых мне функций, а не толькоразделение предложений.Я определенно рекомендую взглянуть на то, как их пример использует, но вот суть моей реализации:
public sealed class SyntaxService : ISyntaxService
{
public SyntaxService(IParser parser, ILexicon lexicon)
{
m_parser = parser;
m_lexicon = lexicon;
// These are the setting I needed, YMMV. They seem to add a lot of UI logic to this method :(
m_processingResources = new ProcessingResources(m_lexicon, null, null, m_parser, 5, null, false, null, null, null, null, false);
}
public IEnumerable<Sentence> GetSentences(string s)
{
IDocument document = new Document(s, m_processingResources);
return document.Select(Mappers.SentenceMapper.Map);
}
readonly IParser m_parser;
readonly ILexicon m_lexicon;
readonly IProcessingResources m_processingResources;
}
Класс Sentence
, на который здесь ссылаются, представляет собой упрощенное синтаксическое дерево вместе с исходным значением предложения.Если вас не очень интересует этот тип дружественного переноса и отображения зависимостей, вы можете просто использовать кишки GetSentences(string)
.