使用spacy添加/删除停用词的最佳方法是什么?我正在使用token.is_stop
函数,并希望对集合进行一些自定义更改.我正在查看文档,但找不到关于停用词的任何内容.谢谢!
我正在研究Python中的两个NLP项目,它们都有类似的任务来从以下句子中提取值和比较运算符:
"... greater than $10 ... ",
"... weight not more than 200lbs ...",
"... height in 5-7 feets ...",
"... faster than 30 seconds ... "
Run Code Online (Sandbox Code Playgroud)
我看到了两种不同的方法来解决这个问题,一种使用非常复杂的正则表达式,另一种使用NER(以及一些正则表达式).
如何解析这些句子中的值?我认为这是NLP中的常见任务.
期望的输出将是这样的:
输入:
"超过10美元"
输出:
{'value': 10, 'unit': 'dollar', 'relation': 'gt', 'position': 3}
Run Code Online (Sandbox Code Playgroud) spaCy 用一个词性标记每个Token
s中的每个s Document
(以两种不同的格式,一种存储在pos
and和pos_
属性中Token
,另一种存储在tag
和tag_
属性中)以及对其.head
标记的语法依赖(存储在dep
和dep_
属性中) ).
其中一些标签是不言自明的,即使是像我这样没有语言学背景的人:
>>> import spacy
>>> en_nlp = spacy.load('en')
>>> document = en_nlp("I shot a man in Reno just to watch him die.")
>>> document[1]
shot
>>> document[1].pos_
'VERB'
Run Code Online (Sandbox Code Playgroud)
其他......不是:
>>> document[1].tag_
'VBD'
>>> document[2].pos_
'DET'
>>> document[3].dep_
'dobj'
Run Code Online (Sandbox Code Playgroud)
更糟糕的是,官方文档甚至不包含大多数这些属性的可能标记列表,也不包含其中任何属性的含义.他们有时会提到他们使用的标记化标准,但这些声明目前还不完全准确,而且最重要的是标准很难追踪.
什么是可能的值tag_
,pos_
和dep_
性质,以及它们意味着什么?
我正在开发一个使用Spacy的代码库.我安装spacy使用:
sudo pip3 install spacy
Run Code Online (Sandbox Code Playgroud)
然后
sudo python3 -m spacy download en
Run Code Online (Sandbox Code Playgroud)
在最后一个命令结束时,我收到一条消息:
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')
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试运行我的代码时,就行了:
from spacy.en import English
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
ImportError: No module named 'spacy.en'
Run Code Online (Sandbox Code Playgroud)
我查看了Stackexchange,最接近的是: 使用spacy导入错误:"没有名为en的模块" ,这不能解决我的问题.
任何帮助,将不胜感激.谢谢.
编辑:我可能通过执行以下操作解决了这个问题:
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>
Run Code Online (Sandbox Code Playgroud)
然后使用:
from spacy.lang.en import English
Run Code Online (Sandbox Code Playgroud)
如果有任何其他答案,我仍然保持开放.
我正在尝试安装
python -m spacy download en_vectors_web_lg
Run Code Online (Sandbox Code Playgroud)
但它抛出错误:
Could not install packages due to an EnvironmentError: [Errno 28] No space left on device
Run Code Online (Sandbox Code Playgroud)
我可以知道为什么会产生错误吗?是说我在安装目录中没有足够的空间吗??
如何使用spacy从文本中提取名词短语?
我不是指词性标签.在文档中,我找不到任何关于名词短语或常规解析树的内容.
即使我下载了模型,也无法加载它
[jalal@goku entity-sentiment-analysis]$ which python
/scratch/sjn/anaconda/bin/python
[jalal@goku entity-sentiment-analysis]$ sudo python -m spacy download en
[sudo] password for jalal:
Collecting https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz
Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz (37.4MB)
100% |????????????????????????????????| 37.4MB 9.4MB/s
Installing collected packages: en-core-web-sm
Running setup.py install for en-core-web-sm ... done
Successfully installed en-core-web-sm-2.0.0
Linking successful
/usr/lib/python2.7/site-packages/en_core_web_sm -->
/usr/lib64/python2.7/site-packages/spacy/data/en
You can now load the model via spacy.load('en')
import spacy
nlp = spacy.load('en')
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-2-0fcabaab8c3d> in <module>()
1 import spacy
2
----> 3 nlp = spacy.load('en')
/scratch/sjn/anaconda/lib/python3.6/site-packages/spacy/__init__.py in …
Run Code Online (Sandbox Code Playgroud) 运行时:
import spacy
nlp = spacy.load('en')
Run Code Online (Sandbox Code Playgroud)
打印如下:
警告:找不到'en'的模型只加载'en'标记生成器.
/site-packages/spacy/data
除init文件外,它是空的.所有文件路径只指向我的单个python安装.
任何有助于解决此问题的帮助.
谢谢!将
我尝试了几种加载google news word2vec向量的方法(https://code.google.com/archive/p/word2vec/):
en_nlp = spacy.load('en',vector=False)
en_nlp.vocab.load_vectors_from_bin_loc('GoogleNews-vectors-negative300.bin')
Run Code Online (Sandbox Code Playgroud)
以上给出:
MemoryError: Error assigning 18446744072820359357 bytes
Run Code Online (Sandbox Code Playgroud)
我也试过.gz打包向量; 或者使用gensim将它们加载并保存为新格式:
from gensim.models.word2vec import Word2Vec
model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
model.save_word2vec_format('googlenews2.txt')
Run Code Online (Sandbox Code Playgroud)
然后,该文件包含每行上的单词及其单词向量.我试着加载它们:
en_nlp.vocab.load_vectors('googlenews2.txt')
Run Code Online (Sandbox Code Playgroud)
但它返回"0".
这样做的正确方法是什么?
更新:
我可以将自己创建的文件加载到spacy中.我在每一行使用带有"string 0.0 0.0 ...."的test.txt文件.然后使用.bzip2将此txt压缩到test.txt.bz2.然后我创建一个spacy兼容的二进制文件:
spacy.vocab.write_binary_vectors('test.txt.bz2', 'test.bin')
Run Code Online (Sandbox Code Playgroud)
我可以加载到spacy:
nlp.vocab.load_vectors_from_bin_loc('test.bin')
Run Code Online (Sandbox Code Playgroud)
这有效!但是,当我为googlenews2.txt执行相同的过程时,我收到以下错误:
lib/python3.6/site-packages/spacy/cfile.pyx in spacy.cfile.CFile.read_into (spacy/cfile.cpp:1279)()
OSError:
Run Code Online (Sandbox Code Playgroud)