Антилопа Проксема: интерфейс не найден "ISentenceSplitter" - PullRequest
3 голосов
/ 03 апреля 2011

Мне нужно немного обработать естественный язык для различных вводимых пользователем текстов в настольном приложении на C #. Я использую Антилопу для этой цели. Первый шаг - разделить текст на предложения. Следуя документации, предоставленной Антилопой, я использовал:

using Proxem.Antelope;
using Proxem.Antelope.Lexicon;
using Proxem.Antelope.Tools;
using Proxem.Antelope.LinkGrammar;
using Proxem.Antelope.Stanford;
using NUnit.Framework;
...
...
...
ISentenceSplitter splitter = new Tools.MIL_HtmlSentenceSplitter();
splitter.Text = text;
foreach (string sentence in splitter.Sentences)
{
    // Process sentence…
}

Кроме того, я также добавил ссылки на эти библиотеки. Но это выдает ошибку

The type or namespace name 'ISentenceSplitter' could not be found (are you missing a using directive or an assembly reference?) C:\Users\...

и

The type or namespace name 'Tools' could not be found (are you missing a using directive or an assembly reference?) C:\Users\...

Кажется, я не могу найти решение. После поиска в сети я обнаружил, что другие люди также имеют эту проблему, но никто не мог найти решение. Не могли бы вы помочь мне, ребята?

Ответы [ 4 ]

2 голосов
/ 09 апреля 2011

Простой ответ - избегать использования этой библиотеки. Без обид авторы, они могли бы сделать v.good и тяжелую работу, но если это не может быть использовано после всевозможных попыток, то это бесполезно. В документе упоминается, что функция принадлежит определенному интерфейсу, но когда вы туда заходите, ее нет ни в одном из доступных интерфейсов.

Для тех, кому интересно: я связался с авторами через их сайт, но не получил ответа даже после 8 дней.

Существуют и другие доступные альтернативы, такие как OpenNLP (java) или его аналог C # SharpNLP .

1 голос
/ 27 августа 2012

У меня была такая же проблема. Это связано с тем, что антилопы dll совместимы с .net Framework 2.0, и ваше приложение настроено на использование .net 4.0. (Возможно) Я изменил свое приложение на .net 2.0, и проблема исчезла. :)

Кроме того, я использовал SharpNLP и Antelope. Антилопа имеет некоторые превосходные черты, такие как Обнаружение сбоя и перенос в wordnet, которого я не видел в SharpNLP.

удачи.

0 голосов
/ 30 июня 2014

Я столкнулся с той же ошибкой.Сали Ху имеет актуальный правильный ответ. Это не ответ о том, как найти или использовать 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).

0 голосов
/ 13 августа 2013

Довольно простой ответ на этот вопрос: ISentenceSplitter отсутствует в реальном выпуске. У меня есть v 0.8.7, которая должна быть такой же бесплатной 2009 версии, которую имеют все остальные. Чтобы подтвердить это, я сделал

grep -r ISentenceSplitter .

и ничего не вернулось. Попробуйте выполнить поиск с другим существующим интерфейсом, таким как ILexicon, и вы увидите все библиотеки, содержащие ILexicon.

Обратите внимание, что речь идет о бесплатной версии, и Proxem, как и другие разумные компании, хочет продавать свои технологии как прибыльное предприятие. Поэтому вы должны быть довольны тем, что у вас есть, искать платные решения, использовать что-то еще или написать свою собственную библиотеку, которую сообщество было бы очень радо иметь.

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