es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spacy regex con caracteres japoneses.

Necesito ayuda con regex en spacy en japonés. Tengo este texto:
道が凍っているから気を付けなさい。
Necesito encontrar cada palabra hasta el carácter “を” en japonés, por lo que básicamente necesito obtener “道が凍っているから気を”. Intenté este código:

import spacy
from spacy.matcher import Matcher

nlp = spacy.load("ja_core_news_sm")
matcher = Matcher(nlp.vocab)
pattern = [{"TEXT": {"REGEX": "^.*?[を]"}}]
matcher.add("mypattern", [pattern])

doc = nlp("Verbwithnoun")
matches = matcher(doc)

for match_id, start, end in matches:
    string_id = nlp.vocab.strings[match_id] 
    print(doc[start:end])

Pero no imprime nada, aunque cuando pruebo este patrón “^.*?[を]” en sitios web diferentes de prueba de regex en Python como Regex101 o Pythex, funciona perfectamente y me devuelve la oración correcta. Pero en Spacy no funciona. No imprime nada. ¿Alguien puede ayudarme por favor?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría radicar en la forma en que se define el patrón en el código. En lugar de usar llaves ({ }) para definir el patrón, sería mejor utilizar corchetes ([ ]) para la parte de REGEX, así:

    pattern = [{"TEXT": {"REGEX": "^.*?[を]"}}, {"IS_PUNCT": True}]
    

    Este patrón debería coincidir con cada palabra hasta el carácter “を” en japonés y luego coincidir con el siguiente signo de puntuación.

    Además, hay un error tipográfico en el código donde “Verbwithnoun” debería reemplazarse por el texto real “道が凍っているから気を付けなさい。”.

    Intenta modificar el código como se sugiere y verifica si devuelve la salida deseada.

Comments are closed.