2009-12-28 31 views
11

Estoy usando JAWS para acceder WordNet. Dada una palabra, ¿hay alguna forma de detectar si es un nombre propio? Parece que los synsets tienen categorías léxicas bastante burdas.¿Detecta nombres propios con WordNet?

Para aclarar, no hay contexto para las palabras: se presentan de forma individual. Si una palabra podría ser utilizada como un nombre común, es aceptable. Así que "marcar" está bien, porque aunque podría ser el nombre de alguien, también podría referirse a un punto. Sin embargo, "África" ​​no lo es.

Respuesta

1

Esa información no parece estar almacenada especialmente en WordNet. Sin embargo, puede ver la primera forma de palabra de un sustantivo sysnet para ver si está en mayúscula. No estoy seguro de qué tan oficial es, pero parece funcionar diciendo que volar no es un nombre propio y que Francia sí lo es.

+1

Este considerarían todos los sustantivos al comienzo de una oración para ser adecuado, sin embargo. Realmente me gustaría cambiar nuestras reglas gramaticales para cosas como esta ya que introducen ambigüedad y no tienen ninguna función en lo que puedo decir más allá de la estética. –

+1

En realidad, todavía no veo qué tiene que ver al principio de una oración. En lugar de solo verificar el sustantivo de las palabras que están en mayúscula, por qué no verificar primero cada palabra para el sustantivo. Luego, compruebe si está en mayúscula en WordNet. No importa si está en mayúscula en su documento original. WordNet devolverá el "libro" independientemente de si pasó en "libro" o "Libro". En cuanto al problema de "marcar" y "marcar", simplemente busque todas las formas de un sintagma sustantivo para ver si alguno de ellos no está capitalizado. – Pace

13

Desafortunadamente, no será capaz de determinar de manera confiable la información de los nombres propios de los sintonizadores de WordNet. Lo que estás buscando es Named Entity Recognition. Hay enlaces a varias versiones disponibles en Java desde la página de wikipedia. Personalmente recomendaría Stanford NER o LingPipe.

Actualizado:

Sobre la base de la restricción añadida de ningún contexto para las palabras, se puede usar la capitalización como indicador principal y luego vuelva a comprobar WordNet para ver si la palabra puede ser utilizado como un sustantivo. Tal vez algo como esto:

String word = "foo"; 
boolean isProperNoun = false; 
if (Character.isUpperCase(word.charAt(0))) { 
    WordNetDatabase database = WordNetDatabase.getFileInstance(); 
    Synset[] synsets = database.getSynsets(word, SynsetType.NOUN); 
    isProperNoun = synsets.length > 0; 
} 

Eso sería eliminar falsos positivos como esto:

Si lo construyes ...
Como desea ...
Oh Romeo, Romeo ...

Y todavía coger sólo los nombres en mayúsculas en

En el libro de Marcos que dice ...
¿Has oído la Roots o La Quién recientemente?

pero aún así dar falsos positivos en

Marcos primera instancia ...
Libro 'em, Danno.

porque podrían ser, pero sin contexto no se sabe.

Si quieres ser realmente complicado, puedes seguir el árbol de hypernym en cualquier sustantivo para ver si alcanzas algo obvio como 'compañía' o 'país'.Sin embargo, la última vez que trabajé con WordNet (hace 4 años), las relaciones de Hypernym/Hyponym no fueron muy confiables ni constantes, lo que podría causar muchos falsos negativos (y sin mejorar los falsos positivos que mencioné anteriormente porque son completamente Dependiente del contexto).

+1

Normalmente, NER depende de que el contexto esté presente. –

+0

Modifiqué mi respuesta para reflejar la falta de contexto. –

2

Déjame ejecutar pasado esto. Es posible que tenga que hacer una ejecución a través de algunos libros más en inglés para obtener información sobre el hecho de que uno no puede determinar la parte del discurso de una palabra fuera de contexto.

Lo mejor que puede hacer es probar la exclusión ... determinando que WordNet no conoce el uso en una parte determinada del discurso. En algunos casos, es posible que encuentre que solo una parte del discurso aparece en WordNet. Por ejemplo, no conozco ningún uso de "automóvil" más que como sustantivo.

Distinguir propia nombres de los comunes es aún más difícil. Ciertamente puedes usar la heurística ... un sustantivo que no es la palabra inicial de una oración y está en mayúscula pero no en ALLCAPS es probablemente un nombre propio.

En última instancia, la distinción es una de semántica en lugar de análisis léxico. Dudo que encuentres una solución razonablemente sólida basada en buscar palabras en WordNet. Creo que tendrá que hacer un análisis gramatical del lenguaje natural antes de poder extraer sustantivos, y mucho menos detectar nombres propios en prosa.

2

Si utiliza la línea de comandos de linux para usar Wordnet, puede usar 'wn -synsn' para obtener todos los sintonizadores de una palabra. Los nombres propios se escriben con mayúscula. Por ejemplo,

$: wn mark -synsn 

    Synonyms/Hypernyms (Ordered by Estimated Frequency) of noun mark 
    15 senses of mark              

    Sense 1 
    mark, grade, score 
     => evaluation, valuation, rating 
    . 
    . 
    . 
    Sense 8 
    Mark, Saint Mark, St. Mark 
     INSTANCE OF=> Apostle, Apostelic Father 
     INSTANCE OF=> Evangelist 
     INSTANCE OF=> saint 

Pero, en serio, por favor, no se basan únicamente en Wordnet para esto. Hay potencialmente millones de nombres propios para los que Wordnet no obtendrá ninguna información. ¡Prueba el nombre Henrik, por ejemplo!

Puede, sin embargo, construir un contexto para su palabra w de conjuntos de datos, como el Google n-gram corpus, y el uso de este tipo de contextos para construir un clasificador que devuelve una puntuación de confianza (es decir, el clasificador podemos decir w es un nombre propio, con 0 = < c = 1 < confianza.)

Cuestiones relacionadas