2012-07-03 3 views
11

Ich möchte eine gute Möglichkeit zur Termextraktion auf Freeform-Consumer-Textdaten durchführen. In einem idealen Szenario könnte ich Nominalphrasen von mindestens zwei Wörtern extrahieren, die eine Art Kontext ihrer Verwendung einschließen. Dies sind meine idealen Anforderungen.Extrahieren von Begriffen mit Kontextrelevanz (Nominalphrasen) aus Text in einem .NET-Projekt

  • Nominalphrase Extraktion
  • Einfache Integration in einem .NET-Projekt
  • keine 3rd-Party-Service-Integration

ich einige der Forschung bereits getan habe und ich habe einige Anmerkungen unten enthalten.

Es gibt viele verschiedene NLP-Bibliotheken da draußen. Die großen Konkurrenten scheinen NLTK und OpenNLP zu sein. Beide unterstützen das Token von Textdaten und extrahieren unter anderem Nominalphrasen. Beide sind jedoch nicht in .NET implementiert und eine Art IPC-Schicht wäre erforderlich. Sie haben beide auch ziemlich hohe Lernkurven.

SharperNLP ist ein C# -Port von OpenNLP. Es hatte eine kurze Aktivität im Jahr 2006, aber nicht viel seitdem.

Hier sind einige Notizen von jemandem, der versucht hat, NLTK in eine .NET-Implementierung mit IronPython zu integrieren.

Open Source NLP in C# 3.5 using NLTK.

Die einfachste Lösung, die ich bisher gefunden habe, ist die SQL Server Integration Services Term Extraction Transformation. Es war sehr einfach zu konfigurieren und in Betrieb zu nehmen. Es konnte aussagekräftige Nominalphrasen mit hoher Genauigkeit extrahieren. Es hat jedoch eine Reihe von Einschränkungen.

  • Es ist ein SSIS-Paket, ideal für die Analyse von Text nach der Tat, aber nicht in Echtzeit.
  • Es erfordert SQL Server Enterprise-Lizenz.
  • Es unterstützt nur Englisch ohne Pläne zur Unterstützung anderer Sprachen.
  • Um zu schließen, merke ich, dass meine Anforderungen ein wenig zu streng sein können, also zögern Sie bitte nicht, mit jeder Art von Lösung zu antworten, die mindestens Nominalphrasensatzfragmente extrahiert.

    +0

    haupt nicht der gleiche Algorithmus ist aber C# Algorithmus ergeben. http://tartarus.org/~martin/PorterStemer/csharp2.txt Eine Nominalphrase ist deutlich komplexer – Paparazzi

    Antwort

    1

    Ich habe einige Nachforschungen angestellt und einen einfachen Weg gefunden, OpenNLP in einem .NET-Projekt mit Hilfe eines Tools namens IKVM.NET zu verwenden. Weitere Informationen zum Portieren von OpenNLP-JAR-Dateien an eine .NET-Assembly finden Sie im folgenden OpenNLP-Wiki-Post.

    A quick guide to using OpenNLP from .NET

    Für weitere Informationen über meine Lösung überprüfen Sie die folgende Post aus.

    Extracting noun phrases with contextual relevance in .NET using OpenNLP

    4

    Haben Sie in Betracht gezogen Lucene.NET? Es wird hier in Stack Overflow verwendet, und es hat die Fähigkeit, Begriffe zu trennen.

    Sie können die PortStemFilter class verwenden, um Dinge wie mehrere Versionen von Wörtern zu behandeln.

    Darüber hinaus müssen Sie wahrscheinlich auf die Apache Solr project (basierend auf Java Lucene) schauen und einige davon in .NET zu portieren, um die NLP-Aspekte zu behandeln. Lucene.NET wird jedoch das Tokening für Sie durchführen, damit Sie einen Teil des Weges dorthin finden.

    Es sollte beachtet werden, dass Lucene.NET 100% .NET-Code ist, direkt von der Java-Version portiert.

    Wenn Sie einen Server haben, auf dem Sie ihn ausführen können, ist es vielleicht besser, SOLR auszuführen und die Aufrufe des Dienstes über HTTP an den Index zu senden, der mit den Filtern konfiguriert wurde, die die gewünschten Ergebnisse liefern für (wahrscheinlich einfacher als die Portierung des NLP-Codes).

    +0

    Wird SOLR Nominalphrasenextraktion aus der Box tun? –

    +0

    Ja, wir verwenden Lucene.NET momentan in Projekten. Korrigiere mich, wenn ich falsch liege, aber AFAIK unterstützt keine Satzbildung und die Identifizierung von Nominalphrasen. Der PortStemFilter sieht interessant aus, aber dies erfüllt keine meiner aktuellen Anforderungen –

    +0

    @seglo nein, es wird nicht, Sie müssten es mit OpenNLP kombinieren, um zu bekommen, was Sie wollen. Weitere Informationen finden Sie unter http://stackoverflow.com/q/2954814/50776. – casperOne