¿Qué lenguajes de programación son adecuados para el procesamiento del lenguaje natural?

Sin duda, Python:

  1. NLTK [1], aunque no es la implementación más eficiente, proporciona muchas herramientas increíbles para crear rápidamente una hipótesis.
  2. El re-módulo de Python [2] es asombroso. Combine re con listas de comprensión y colecciones y puede hacer algunas cosas realmente geniales:
    def words(paragraph): return [ w.lower() for word in re.findall(r"([az]+)",paragraph) ] 

    (si no crees que esa función es increíble, no sigas leyendo …)

    Para más información, echa un vistazo al corrector de hechizos de Peter Norvig [3]

  3. Scipy [4] + Numpy [5]: todo lo que no está en NLTK definitivamente está en estas bibliotecas. Si desea utilizar algoritmos más avanzados como la Indización Semántica Latente [11] o la Asignación de Dirichlet Latente [13], Python tiene bibliotecas para hacerlo también [12].
  4. Python tiene geniales bibliotecas de análisis XML / HTML como Beautiful Soup [6] y Scrape.py [7]. Puede usar estas bibliotecas para raspar rápidamente la web y generar grandes conjuntos de datos para mejorar el rendimiento de sus modelos (porque admitámoslo, los grandes datos superan la complejidad)
  5. Python tiene grandes frameworks web como Django [8] / Pylons [9] / Tornado [10]. Si inventa un detector de sarcasmo revolucionario que puede predecir tendencias en el mercado de valores, puede integrarlo rápidamente en un servicio web, ganar millones y comprar una isla grande en un país del tercer mundo.
  6. Considere sus otras opciones: no tendría sentido usar un lenguaje compilado como C ++ / Java para este tipo de trabajo a menos que necesite aumentar el rendimiento (velocidad computacional, no precisión del modelo). Por lo que puedo decir, Ruby es completamente inútil para cualquier tarea de aprendizaje automático, minería de datos o procesamiento de lenguaje natural. Tal vez podría usar Lisp, pero en este punto, Python tiene un ecosistema más grande.

[1] http://www.nltk.org/
[2] http://docs.python.org/library/r…
[3] http://norvig.com/spell-correct….
[4] http://www.scipy.org/
[5] http://numpy.scipy.org/
[6] http://www.crummy.com/software/B…
[7] http://zesty.ca/scrape/
[8] https://www.djangoproject.com/
[9] https://www.pylonsproject.org/
[10] http://www.tornadoweb.org/
[11] http://en.wikipedia.org/wiki/Lat…
[12] https://github.com/josephmisiti/…
[13] http://en.wikipedia.org/wiki/Lat…

Normalmente comienzo con Python. Es fácil crear prototipos, probar diferentes herramientas (NLTK, sklearn) y ver si algo funciona. A veces, llegarás a una solución que funciona lo suficientemente bien y la llamarás un día.

Después de eso, normalmente uso C ++ después de eso si hay cuellos de botella severos que necesitamos hacer más eficientes. Se integra muy bien con Python, por lo que puedo usar mucho del código existente que tenía antes y enfocarme en los cuellos de botella.

Mis alumnos a menudo usan Java. Tiene buenas bibliotecas (OpenNLP, LingPipe, Stanford NLP, Mallet), pero no me gusta la “sensación” de Java y descubro que las cosas tardan mucho más en despegar.

Como nadie lo ha mencionado todavía, Java tiene OpenNLP (Bienvenido a Apache OpenNLP), LingPipe (LingPipe Home) y Stanford CoreNLP (Grupo Stanford NLP (Procesamiento de lenguaje natural)). Además, Lucene también puede ser útil al proporcionar un análisis de texto completo y tokenización (en todos los idiomas), aunque se centra principalmente en la recuperación de la información / búsqueda de texto: Bienvenido a Apache Lucene

Además, tiene una tonelada de otros proyectos que respaldarán sus esfuerzos de PNL, por ejemplo, proporcionando funcionalidades de aprendizaje automático como estas:

y algunos de los proyectos más utilizados y populares para el procesamiento de datos a gran escala y el aprendizaje automático:

  • Hadoop ¡Bienvenido a Apache ™ Hadoop®!
  • Spark Apache Spark ™: computación en clúster ultrarrápida
  • Mahout https://mahout.apache.org/

No veo por qué alguien diría “no use ningún lenguaje compilado”, eso parece ser completamente infundado. Especialmente algo como Java, que es muy fácil de usar y construir programas, especialmente con IDEs modernos, y tiene lenguajes de script que puede ejecutar sobre la JVM con cualquier biblioteca de Java.

Sin mencionar en la mayoría de los puntos de referencia, Java es significativamente más rápido que python (y otros lenguajes interpretados) en la mayoría de las tareas.
Python 3 vs Java