python - propn - spacy sentiment analysis
ImportError: ningún módulo llamado ''spacy.en'' (5)
Estoy trabajando en un código base que usa Spacy. Instalé spacy usando:
sudo pip3 install spacy
y entonces
sudo python3 -m spacy download en
Al final de este último comando, recibí un mensaje:
Linking successful
/home/rayabhik/.local/lib/python3.5/site-packages/en_core_web_sm -->
/home/rayabhik/.local/lib/python3.5/site-packages/spacy/data/en
You can now load the model via spacy.load(''en'')
Ahora, cuando intento ejecutar mi código, en la línea:
from spacy.en import English
me da el siguiente error:
ImportError: No module named ''spacy.en''
He buscado en Stackexchange y el más cercano es: Error de importación con spacy: "No hay un módulo llamado en" que no resuelve mi problema.
Cualquier ayuda sería apreciada. Gracias.
Edit: Podría haber resuelto esto haciendo lo siguiente:
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import spacy
>>> spacy.load(''en'')
<spacy.lang.en.English object at 0x7ff414e1e0b8>
y luego usando:
from spacy.lang.en import English
Todavía mantengo esto abierto en caso de que haya otras respuestas.
Creo que hay una confusión en las respuestas proporcionadas. Corregir las cosas mencionadas:
- usted debe importar desde spacy.lang.en
- spacy.load (''en'') es de hecho un atajo para cargar modelos.
Pero: el archivo en_core_web_sm no es el mismo que el que importa desde spacy.lang.en. En realidad, el primer archivo se produce a partir del segundo después de entrenar con spacy train en un conjunto de datos y luego empaquetar el resultado. spacy.lang.en contiene la definición del modelo: tabla de búsqueda de lemas, palabras clave de parada, atributos léxicos (y más). Pero eso y sólo eso. No se entrena con un conjunto de datos para que el gráfico de dependencia y otras funcionalidades puedan funcionar.
Creo que esto debería ser lo suficientemente claro cuando se trabaja con spaCy.
Sí, puedo confirmar que su solución es correcta. La versión de spaCy que descargaste de pip es v2.0, que incluye muchas características nuevas, pero también algunos cambios en la API . Una de ellas es que todos los datos de idioma se han trasladado a un submódulo spacy.lang
para mantener la cosa más limpia y mejor organizada. Así que en lugar de usar spacy.en
, ahora importas desde spacy.lang.en
.
Por cierto, no está exactamente claro lo que intentabas hacer en tu código, pero si estás cargando un modelo en inglés, generalmente no es necesario importar e inicializar el English
. SpaCy hará esto por ti.
nlp = spacy.load(''en'') # <-- an instance of `English` with data loaded in
doc = nlp(u"This is a text.")
Básicamente, spacy.load(''en'')
es un atajo para:
- Encuentre el modelo instalado llamado
''en''
(un paquete o enlace de acceso directo). - Lea su
meta.json
y compruebe qué idioma está utilizando y cómo debería verse sumeta.json
procesamiento. - Inicialice la clase de idioma y agréguele la canalización.
- Cargue los pesos binarios de los datos del modelo para que los componentes de la tubería (como el etiquetador, el analizador o el reconocedor de entidad) puedan hacer predicciones.
Vea esta sección en la documentación para más detalles.
Tuve que usar en_core_web_sm en lugar de en para hacer que funcionara. Se está quejando sobre el problema del permiso. Lo siguiente funciona perfectamente:
import spacy
spacy.load(''en_core_web_sm'')
from spacy.lang.en import English
Utilicé el siguiente comando para instalar spacy desde la distribución de anaconda.
conda install -c conda-forge spacy
y después de eso, pude descargar Inglés usando el siguiente comando sin ningún error.
python -m spacy download en
la carpeta en_core_web_sm se descargó fuera de la carpeta spacy. Lo copié en la carpeta spacy / data y pude ejecutar el código tal como está documentado en spacy