Извлечение терминов с контекстуальной релевантностью (существительные-фразы) из текста в .NET-проекте

Я хотел бы найти хороший способ выполнить извлечение термина в текстовых данных произвольной формы. В идеальном сценарии я мог извлечь существительные фразы по крайней мере из двух слов, которые включают какой-то контекст их использования. Это мой идеальный набор требований.

  • Выделение словесной фразы
  • Легкая интеграция в .NET-проекте
  • Нет интеграции сторонних сервисов

Я уже провел некоторое исследование, и я добавил некоторые примечания ниже.

Существует множество различных библиотек НЛП. Большие соперники выглядят как NLTK и OpenNLP. Оба поддерживают токенизацию текстовых данных и извлечение среди других вещей, существительных фраз. Однако ни один из них не реализован в .NET и не требуется какой-то уровень IPC. Они оба имеют довольно высокие кривые обучения.

SharperNLP - это порт С# для OpenNLP. В 2006 году у него был небольшой шквал активности, но с тех пор он не сильно изменился.

Вот некоторые заметки от кого-то, кто пытался интегрироваться с NLTK в .NET-реализации с помощью IronPython.

Open Source NLP в С# 3.5 с использованием NLTK.

Самое простое решение, которое я нашел до сих пор, это SQL Server Integration Services Term Expression Transformation. Было очень просто настроить и запустить. Он умел извлекать значимые существительные фразы с высокой степенью точности. Однако он имеет ряд ограничений.

  • Это пакет SSIS, отлично подходящий для анализа текста после факта, но не в режиме реального времени.
  • Для этого требуется корпоративная лицензия SQL Server.
  • Он поддерживает только английский язык без планов поддержки других языков.

Чтобы закрыть, я понимаю, что мои требования могут быть слишком строгими, поэтому, пожалуйста, не стесняйтесь отвечать любым решением, которое, по крайней мере, извлекает фрагменты фразы фразы фразы.

Ответ 1

Я провел некоторое исследование и нашел простой способ использовать OpenNLP в .NET-проекте с помощью инструмента, известного как IKVM.NET. Для получения дополнительной информации о том, как переносить баннеры OpenNLP в сборку .NET, см. Следующий wiki файл OpenNLP.

Краткое руководство по использованию OpenNLP из .NET

Для получения дополнительной информации о моем решении проверьте следующее сообщение.

Извлечение именных фраз с контекстуальной релевантностью в .NET с использованием OpenNLP

Ответ 2

Вы считали Lucene.NET? Он используется здесь для, и он имеет возможность разделить термины.

Вы можете использовать PortStemFilter класс для обработки таких вещей, как множественные версии слов.

Кроме того, вам, вероятно, придется посмотреть проект Apache Solr (на основе Java Lucene) и переносить некоторые из этих работ на .NET, чтобы обрабатывать аспекты NLP. Тем не менее, Lucene.NET выполнит токенизацию для вас, так что вы получите часть этого пути.

Следует отметить, что Lucene.NET - это 100% -ный код .NET, портированный непосредственно из версии Java.

Кроме того, если у вас есть сервер, на котором вы можете запустить его, вам может быть лучше просто запустить SOLR и сделать вызовы службы через HTTP с индексом, настроенным с фильтрами, которые приведут к результатам, которые вы ищете (возможно, проще, чем перенос кода NLP).