¿Cómo puedo extraer palabras de una oración y determinar qué parte del discurso es cada una? [cerrado]

19

Quiero escribir algo que tome una oración e identifique cada palabra que contiene y defina qué parte del discurso es cada palabra.

Por ejemplo

Hola mundo soy una frase

devolvería esto

verb noun, pronoun verb adjective noun

Idealmente, me gustaría ir un paso más allá y tomar una oración y hacer que entienda programáticamente lo que está tratando de interpretar y tal vez hacer algo al respecto.

Entonces mi pregunta es, ¿alguien ha oído hablar de algo como esto?

Vinny
fuente
2
"Hola" es un verbo? Quiero decir, no sé qué más sería, pero no parece un verbo.
Dan Ray
@DanRay: ¿Tal vez esa es una pregunta para english.stackexchange.com?
StriplingWarrior
1
@DanRay jaja, ¿lo ves? Es por eso que estoy tratando de averiguar si algo puede hacer esto, porque aparentemente soy terrible en la gramática.
Vinny
@Vinny - Por supuesto que es posible. El problema es ... esta es la idea del próximo billón de dólares, y en este momento, todavía no se ha convertido en un producto.
Ramhound
1
@Vinny Sí, alguien ha oído hablar de algo así.
Tulains Córdova

Respuestas:

18

Esto se llama procesamiento del lenguaje natural y es un campo enorme y complejo. Algo como lo que usted describe es un logro monumental, e incluso las mejores soluciones, como Watson , no son para nada perfectas.

Cosas como esta lo hacen desafiante: "Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo"

una oración gramaticalmente correcta en inglés americano, usada como un ejemplo de cómo los homónimos y los homófonos pueden usarse para crear construcciones lingüísticas complicadas. Se ha discutido en la literatura desde 1972 ... También apareció en el libro de 1994 de Steven Pinker, The Language Instinct, como un ejemplo de una oración que es "aparentemente sin sentido" pero gramatical ...

El significado de la oración se vuelve más claro cuando se entiende que usa la ciudad de Buffalo, Nueva York y el verbo algo poco común "to buffalo" (que significa "intimidar o intimidar"), y cuando la puntuación y la gramática se expanden para que la oración dice lo siguiente: "Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo". El significado se vuelve aún más claro cuando se usan sinónimos: "Buffalo bison que otros bisontes de Buffalo intimidan, ellos mismos intimidan a Buffalo bison".

Ryathal
fuente
1
¡Esto es lo que estoy buscando! ¿Alguien ha oído hablar de alguien que esté adaptando esto en una escala menor? ¿Fuente abierta? ¿Ejemplos de esto siendo usado en escalas más pequeñas?
Vinny
@Vinny AFAIK no hay mucho disponible en código abierto ya que resolver estos problemas es altamente rentable para las empresas, como la detección de gramática de MS Word. Sin embargo, creo que hay algunos programas de chatter-bot que están disponibles.
Ryathal
1
@Vinny Su dificultad no tiene nada que ver con la escala. El procesamiento del lenguaje natural tiene una complejidad inherente que no se reduce cuando se reduce la "escala".
Tulains Córdova
6

Si bien dividir una oración y determinar la corrección gramatical junto con la resolución de su primer problema es más fácil que su segundo problema, muchas complejidades como los verbos-sustantivos o gerundios como la natación, la programación, etc. y otras complejidades similares, todavía es un desafío: vea Morons ' responder.

Pero el segundo problema - la gente ha puesto en enormes esfuerzos para encontrar una solución perfecta, pero es un algoritmo perfecto "interpretación" no es realizable prácticamente para cualquier lenguaje natural como Inglés - hay variaciones que se tornillo hasta su algoritmo. Este campo, un híbrido entre IA, informática y lingüística, se conoce como PNL . Considere esto: incluso el Traductor de Google no es perfecto cuando "interpreta" oraciones.

Sin embargo, este es un campo muy interesante para jugar.

Yati Sagade
fuente
@StriplingWarrior Solo quería contrastar lo suficiente entre los dos problemas planteados por el OP. Célebre. Edición en camino
yati sagade
4

Creo que deberías comenzar a leer este artículo de Wikipedia:

http://en.wikipedia.org/wiki/Part-of-speech_tagging

(es un campo de investigación, no esperes ninguna solución fácil para ello).

Doc Brown
fuente
2
Debe agregarse que si bien la PNL es enorme, difícil y probablemente intratable en las computadoras de hoy en día, el etiquetado de POS es la parte más fácil, y con un tamaño de cuerpo suficiente o una gran dedicación y escritura manual de reglas, se puede resolver casi perfectamente, ciertamente por encima del 99% de corrección. Eso bien puede ser suficiente para sus necesidades.
Kilian Foth
gracias, esto es exactamente lo que también estaba buscando.
Amc_rtty
en realidad basado en la descripción de OP, esta debería ser la respuesta aceptada ya que observa correctamente @KilianFoth
Amc_rtty
-1

Una forma económica de hacer esto sería configurar una base de datos del diccionario (estoy casi seguro de que alguien ha hecho esto).

Necesita dos campos en la tabla: wordyusage

Convierta la frase en una serie de cadenas (cada palabra es una cadena) e independientemente:

select 'usage' from Dictionary WHERE 'word' = $word; 

Es una solución pesada, pero que he usado en el pasado.

mheinke
fuente
55
Esto supone que cada palabra tiene un solo POS posible, y le aseguro que ese no es el caso en absoluto.
microtherion
De acuerdo: no hay forma de que esto funcione de manera factible (al menos en inglés) con todas las palabras que pueden actuar como sustantivos, verbos, etc., según el contexto.
Derek