2012-07-03 9 views
11

Me gustaría descubrir una buena forma de realizar extracción de términos en datos de texto de consumidor de formato libre. En un escenario ideal podría extraer frases nominales de al menos dos palabras que incluyen algún tipo de contexto de su uso. Estos son mi conjunto ideal de requisitos.Extracción de términos con relevancia contextual (frases nominales) del texto en un proyecto .NET

  • sintagma nominal extracción
  • Fácil integración en un proyecto .NET
  • No hay servicio de 3 ª parte la integración

que he hecho algunas investigaciones ya y he incluido algunas notas a continuación.

Hay muchas bibliotecas de PNL diferentes por ahí. Los grandes contendientes parecen ser NLTK y OpenNLP. Ambos admiten tokenizar datos de texto y extraer, entre otras cosas, frases nominales. Sin embargo, ninguno de los dos se implementa en .NET y se necesitaría algún tipo de capa de IPC. Ambos también tienen curvas de aprendizaje bastante altas.

SharperNLP es un puerto C# de OpenNLP. Tuvo una breve ráfaga de actividad en 2006, pero no mucho desde entonces.

Aquí hay algunas notas de alguien que intentó integrarse con NLTK en una implementación .NET utilizando IronPython.

Open Source NLP in C# 3.5 using NLTK.

La solución más fácil que he encontrado hasta el momento es SQL Server Integration Services Term Extraction Transformation. Fue muy simple de configurar y poner en marcha. Pudo extraer frases nominales significativas con un alto grado de precisión. Sin embargo, tiene una serie de limitaciones.

  • Es un paquete SSIS, ideal para analizar texto después de los hechos, pero no en tiempo real.
  • Requiere una licencia empresarial de SQL Server.
  • Solo es compatible con inglés sin planes de compatibilidad con otros idiomas.

Para cerrar, me doy cuenta de que mis requisitos pueden ser demasiado estrictos, así que no dude en responder con cualquier tipo de solución que al menos extraiga fragmentos de frases nominales.

+0

No, en absoluto el mismo algoritmo, pero es C# derivada de algoritmo. http://tartarus.org/~martin/PorterStemmer/csharp2.txt Una frase nominal es claramente más compleja – Paparazzi

Respuesta

1

Investigué un poco y encontré una manera fácil de usar OpenNLP en un proyecto .NET con la ayuda de una herramienta conocida como IKVM.NET. Para obtener más información sobre cómo portar los archivos jar de OpenNLP a un ensamblado .NET, consulte la siguiente publicación wiki de OpenNLP.

A quick guide to using OpenNLP from .NET

Para obtener más información sobre mi solución revisa el siguiente puesto.

Extracting noun phrases with contextual relevance in .NET using OpenNLP

4

¿Has considerado Lucene.NET? Se usa aquí en Stack Overflow y tiene la capacidad de dividir términos.

Puede usar el PortStemFilter class para manejar cosas como las versiones de palabras en plural.

Más allá de eso, probablemente tendrá que mirar el Apache Solr project (basado en Java Lucene) y portar parte de ese trabajo a .NET para manejar los aspectos de PNL. Sin embargo, Lucene.NET realizará la tokenización por ti, por lo que te lleva a una parte del camino hasta allí.

Cabe señalar que Lucene.NET es 100% código .NET, portado directamente desde la versión de Java.

Además, si tiene un servidor en el que puede ejecutarlo, es mejor que solo ejecute SOLR y realice las llamadas al servicio a través de HTTP al índice configurado con los filtros que producirán los resultados que busca. para (probablemente más fácil que hacer la portación del código NLP).

+0

¿SOLR sacará la extracción de frase nominal de SOLR? –

+0

Sí, usamos Lucene.NET en proyectos en este momento. Corrígeme si me equivoco, pero AFAIK no es compatible con la fragmentación de oraciones y la identificación de frases nominales. El PortStemFilter parece interesante, pero esto no cumple ninguno de mis requisitos actuales –

+0

@seglo no, no lo hará, tendrá que combinarlo con OpenNLP para obtener lo que desea. Ver http://stackoverflow.com/q/2954814/50776 para más detalles. – casperOne

Cuestiones relacionadas