Te doy la bienvenida a nuestra comunidad, ahora encontrarás la resolución a lo que estás buscando.
Solución:
Puede usar subprocesos múltiples en spacy para crear una canalización rápida de tokenización e ingesta de datos.
Reescribiendo su bloque de código y funcionalidad usando el nlp.pipe
método sería algo como esto:
import spacy
nlp = spacy.load('en')
docs = df['text'].tolist()
def token_filter(token):
return not (token.is_punct | token.is_space | token.is_stop | len(token.text) <= 4)
filtered_tokens = []
for doc in nlp.pipe(docs):
tokens = [token.lemma_ for token in doc if token_filter(token)]
filtered_tokens.append(tokens)
De esta manera pone todo su filtrado en el token_filter
función, que toma un token espacial y devuelve True
solo si no es puntuación, un espacio, una palabra vacía y 4 o menos caracteres. Luego, usa esta función a medida que pasa por cada token en cada documento, donde devolverá el lema solo si cumple con todas esas condiciones. Después, filtered_tokens
es una lista de sus documentos tokenizados.
Algunas referencias útiles para personalizar esta canalización serían:
- Simbólico attributes
- Idioma.pipe
Debes filtrar tokens después analizando De esta manera, el modelo entrenado proporcionará un mejor etiquetado (a menos que haya sido entrenado en texto filtrado de manera similar, lo cual es poco probable). Además, el filtrado posterior permite utilizar nlp.pipe
, al que se le dice que sea rápido. Ver el nlp.pipe
ejemplo en http://spacy.io/usage/spacy-101#lightning-tour-multi-threaded.
Te invitamos a añadir valor a nuestra información contribuyendo tu veteranía en las anotaciones.