2012-03-06 12 views
8

Recientemente comencé a trabajar con ontologías y estoy usando Protege para crear una ontología que también me gustaría usar para clasificar cadenas automáticamente. A continuación se ilustra una jerarquía de clases muy básico:Clasificación de cadenas basada en Ontology

String 
|_ AlphabeticString 
    |_ CountryName 
    |_ CityName 
|_ AlphaNumericString 
    |_ PrefixedNumericString 
|_ NumericString 

Finalmente cadenas como Spain deberían clasificarse como CountryName o UE4564 habría una PrefixedNumericString.

Sin embargo, no estoy seguro de cómo modelar este conocimiento. ¿Tendría que definir primero si un personaje es alfabético, numérico, etc. y luego construir una palabra a partir de los caracteres existentes o hay alguna forma de usar Regexes? Hasta ahora solo logré clasificar cadenas basadas en una frase exacta como String and hasString value "UE4565".

¿O sería mejor guardar una expresión regular para cada clase en la ontología y luego clasificar la cadena en Java usando esas expresiones regulares?

Respuesta

2

No sé nada sobre Protege, pero puede usar regex para que coincida con la mayoría de esos casos. El único problema sería diferenciar entre el país y el nombre de la ciudad, no veo cómo podrías hacer eso sin una lista completa de ninguno de los dos.

Estas son algunas de las expresiones que puede utilizar:

  • AlphabeticString:

    ^[A-Za-z]+\z (ASCII) o ^\p{Alpha}+\z (Unicode)

  • AlphaNumericString:

    ^[A-Za-z0-9]+\z (ASCII) o ^\p{Alnum}+\z (Unicode)

  • PrefixedNumericString:

    ^[A-Za-z]+[0-9]+\z (ASCII) o ^\p{Alpha}+\p{N}+\z (Unicode)

  • NumericString:

    ^[0-9]+\z (ASCII) o ^\p{N}+\z (Unicode)

+0

Una cadena podría ser tanto el nombre de una ciudad como el nombre de un país (bueno, conceptualmente, se basa en los hechos dados hasta ahora). Una ontología no necesita tener herencia única. –

2

Una cadena particular es una instancia, por lo que necesitará algún código para hacer las afirmaciones básicas sobre el particular en postura. Ese código en sí podría contener el uso de expresiones regulares. Una vez que tenga esas afirmaciones, podrá usar su ontología para razonar sobre ellas.

La parte difícil es que tienes que decidir en qué nivel vas a modelar. Por ejemplo, ¿vas a hablar de personajes individuales? Puedes, pero no es necesariamente sensato. También tiene el desafío que surge del hecho de que información negativa es incómoda (ya que el modelo básico de tales modelos es intuicionista, IIRC) lo que significa (por ejemplo) que sabrá que una cadena contiene un carácter numérico pero no es puramente numérico Sí, sabría que no tiene una afirmación de que la instancia contenga un carácter alfabético, pero no sabría si eso se debe a que la cadena no tiene uno o simplemente porque nadie lo ha dicho todavía. ¡Esto es difícil!

Es mucho más fácil escribir una ontología si sabe exactamente qué problemas tiene la intención de resolver con ella, ya que eso le permite al menos intentar determinar qué hechos y relaciones necesita establecer en primer lugar. Después de todo, hay todo un mundo de cosas posibles que podrían decirse que son ciertas pero irrelevantes ("si el sol se ha puesto el sombrero, saldrá a jugar").

6

Un enfoque que podría ser apropiado aquí, especialmente si la ontología es grande/complicada o podría cambiar en el futuro, y suponiendo que algunos errores son aceptables, es machine learning.

un esquema de un proceso que utiliza este enfoque podría ser:

  1. definir un conjunto de características se puede extraer de cada cadena, en relación a su ontología (algunos ejemplos a continuación).
  2. Recoge un "conjunto de trenes" de cadenas y sus verdaderas categorías coincidentes.
  3. Extraiga las características de cada cadena y entrene algunos algoritmos de aprendizaje automático en estos datos.
  4. Utilice el modelo capacitado para clasificar nuevas cadenas.
  5. Reagrupe o actualice su modelo según sea necesario (por ejemplo, cuando se agregan nuevas categorías).

Para ilustrar más concretamente, he aquí algunas sugerencias basadas en su ejemplo de ontología.

Algunas características booleanas que pueden ser aplicables: la cadena coincide con una expresión regular (por ejemplo, las que Qtax sugiere); ¿existe la cadena en una lista de nombres de ciudades conocida preconstruida? existe en una lista conocida de nombres de países; existencia de letras mayúsculas; longitud de la cadena (no booleano), etc.

Así que si, por ejemplo, tiene un total de 8 funciones: partido a las 4 expresiones regulares mencionados anteriormente; y los 4 adicionales sugeridos aquí, entonces "España" se representaría como (1,1,0,0,1,0,1,5) (haciendo coincidir las primeras 2 expresiones regulares pero no las dos últimas, es un nombre de ciudad pero no es un nombre de país, tiene una letra mayúscula y la longitud es 5).

Este conjunto de características representará cualquier cadena dada.

para entrenar y probar un algoritmo de aprendizaje automático, puede utilizar WEKA. Comenzaría a partir de algoritmos basados ​​en reglas o árbol, p. PART, RIDOR, JRIP o J48.

A continuación, los modelos de formación se puede utilizar a través de Weka ya sea desde dentro Java o como una línea de comando externo.

Obviamente, las características que sugiero tienen una coincidencia casi 1: 1 con su Ontology, pero suponiendo que su taxonomía es más grande y compleja, este enfoque probablemente sea uno de los mejores en términos de costo-efectividad.

+0

¡Esa fue la mejor respuesta que he leído en mucho tiempo! De hecho, fue tan bueno que ahora quiero probarlo por mí mismo. Gracias, etov –

1

Respondiendo directamente a su pregunta, usted comienza por verificar si un token dado es numérico, alfanumérico o alfabético (puede usar la expresión regular aquí) y luego lo clasifica como tal. En general, el enfoque que está buscando se llama jerarquía de generalización de tokens o selección jerárquica de características (Google it). La idea básica es que podrías tratar a cada token como un elemento separado, pero ese no es el mejor enfoque ya que no puedes cubrirlos a todos [*]. En su lugar, utiliza funciones comunes entre tokens (por ejemplo, 2000 y 1981 son tokens distintos pero comparten una característica común de ser números de 4 dígitos y posiblemente años).Luego tiene una clase para números de cuatro dígitos, otra para alfanuméricos, y así sucesivamente. Este proceso de generalización lo ayuda a simplificar su enfoque de clasificación.

Con frecuencia, si comienza con una cadena de tokens, debe preprocesarlos (por ejemplo, eliminar signos de puntuación o símbolos especiales, eliminar palabras que no son relevantes, derivar, etc.). Pero tal vez puedas usar algunos símbolos (por ejemplo, puntuación entre ciudades y países, por ejemplo, Melbourne, Australia), por lo que debes asignar ese conjunto de símbolos de puntuación útiles a otro símbolo (#) y usarlo como contexto (entonces la próxima vez que encuentres un palabra al lado de una coma al lado de un país conocido, puede usar ese conocimiento para suponer que la palabra desconocida es una ciudad.

De todos modos, esa es la idea general detrás de la clasificación usando una ontología (basada en una taxonomía de términos). también es posible que desee leer sobre part-of-speech tagging.

Por cierto, si sólo quiere tener 3 categorías (numéricos, alfanuméricos, alfabético), una opción viable sería utilizar edit distance (lo que es más probable, que UA4E30 pertenecen s a la categoría alfanumérica o numérica, considerando que no se corresponde con el formato tradicional de las cadenas numéricas prefijadas?). Entonces, usted asume un costo por cada operación (inserción, eliminación, sustitución) que transforma su token desconocido en uno conocido.

Finalmente, aunque dijiste que estás usando Protege (que no he usado) para construir tu ontología, te recomendamos que consultes WordNet.

[*] Existen enfoques probabilísticos que lo ayudan a determinar la probabilidad de un token desconocido, por lo que la probabilidad de dicho evento no es cero. Por lo general, esto se hace en el contexto de Hidden Markov Models. En realidad, esto podría ser útil para mejorar la sugerencia dada por etov.

Cuestiones relacionadas