相关疑难解决方法(0)

使用spaCy进行POS标记

我正在尝试使用Python中的spaCy模块进行POS标记.

这是我的相同代码

from spacy.en import English, LOCAL_DATA_DIR
import spacy.en
import os

data_dir = os.environ.get('SPACY_DATA', LOCAL_DATA_DIR)
nlp = English(parser=False, tagger=True, entity=False)


def print_fine_pos(token):
    return (token.tag_)

def pos_tags(sentence):
    sentence = unicode(sentence, "utf-8")
    tokens = nlp(sentence)
    tags = []
    for tok in tokens:
        tags.append((tok,print_fine_pos(tok)))
    return tags

a = "we had crispy dosa"
print pos_tags(a)
Run Code Online (Sandbox Code Playgroud)

输出:

[(We , u'PRP'), (had , u'VBD'), (crispy , u'NN'), (dosa, u'NN')]
Run Code Online (Sandbox Code Playgroud)

在这里,它返回crispy作为名词而不是形容词.但是,如果我使用类似的测试句子

a="we had crispy fries"
Run Code Online (Sandbox Code Playgroud)

它认识到脆皮是一个形容词.这是输出:

[(we , u'PRP'), (had , u'VBD'), (crispy , u'JJ'), (fries, u'NNS')] …
Run Code Online (Sandbox Code Playgroud)

python nlp spacy

13
推荐指数
1
解决办法
1万
查看次数

NLTK认为势在必行是名词

我在配方上使用pos_tagger.我遇到的一个问题是pos_tagger返回命令式时态中的单词是名词,它们不应该是动词吗?例如:

随着输入:

combine 1 1/2 cups floud, 3/4 cup sugar, salt and baking powder
Run Code Online (Sandbox Code Playgroud)

输出是:

[('combine', 'NN'), ('1', 'CD'), ('1/2', 'CD'), ('cups', 'NNS'), ('floud', 'VBD'), (',',      ','), ('3/4', 'CD'), ('cup', 'NN'), ('sugar', 'NN'), (',', ','), ('salt', 'NN'), ('and', 'CC'), ('baking', 'VBG'), ('powder', 'NN')]
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

    def part_of_speech(self,input_sentance):
        text = nltk.word_tokenize(input_sentance)
        return nltk.pos_tag(text)
Run Code Online (Sandbox Code Playgroud)

不应该'结合'被标记为某种动词吗?这是nltk的错吗?或者我做错了什么?

python nltk

12
推荐指数
1
解决办法
2617
查看次数

如何使用Stanford NLP Tagger和NLTK提高速度

有没有办法以更高效的方式使用Standford Tagger?

每次调用NLTK的包装器都会为每个分析的字符串启动一个新的java实例,这非常非常慢,特别是当使用更大的外语模型时......

http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford

python nltk stanford-nlp

12
推荐指数
2
解决办法
5132
查看次数

在NLTK Python中使用Stanford POS Tagger时出错

我试图在NLTK中使用Stanford POS Tagger,但我无法运行此处给出的示例代码http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford

import nltk
from nltk.tag.stanford import POSTagger
st = POSTagger(r'english-bidirectional-distim.tagger',r'D:/stanford-postagger/stanford-postagger.jar')
st.tag('What is the airspeed of an unladen swallow?'.split())
Run Code Online (Sandbox Code Playgroud)

我已经添加了环境变量

CLASSPATH = D:/stanford-postagger/stanford-postagger.jar
STANFORD_MODELS =  D:/stanford-postagger/models/
Run Code Online (Sandbox Code Playgroud)

这是我不断得到的错误

Traceback(最近一次调用最后一次):

File "D:\pos_stanford.py", line 4, in <module>
    st = POSTagger(r'english-bidirectional-distim.tagger',
         r'D:/stanford-postagger/stanford-postagger.jar')  
... LookupError: NLTK was unable to find the english-bidirectional-distim.tagger file! Use software specific configuration paramaters or set the STANFORD_MODELS environment variable.
Run Code Online (Sandbox Code Playgroud)

一些论坛建议

File "C:\Python27\lib\site-packages\nltk\tag\stanford.py", line 45, in __init__
env_vars=('STANFORD_MODELS'), verbose=verbose)
Run Code Online (Sandbox Code Playgroud)

应该改变,以便有一个逗号

env_vars=('STANFORD_MODELS',), verbose=verbose)
Run Code Online (Sandbox Code Playgroud)

但它也没有解决问题.请帮我解决这个问题.

其他信息:我使用的是Windows 7 64位Python 2.7 32位NLTK 2.0

nltk pos-tagger stanford-nlp python-2.7

11
推荐指数
1
解决办法
8374
查看次数

Nltk stanford pos tagger错误:Java命令失败

我正在尝试nltk.tag.stanford module 用来标记一个句子(首先像wiki的例子),但我一直收到以下错误:

Traceback (most recent call last):
  File "test.py", line 28, in <module>
    print st.tag(word_tokenize('What is the airspeed of an unladen swallow ?'))
  File "/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py", line 59, in tag
    return self.tag_sents([tokens])[0]
  File "/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py", line 81, in tag_sents
    stdout=PIPE, stderr=PIPE)
  File "/usr/local/lib/python2.7/dist-packages/nltk/internals.py", line 160, in java
    raise OSError('Java command failed!')
OSError: Java command failed!
Run Code Online (Sandbox Code Playgroud)

或以下LookupError错误:

LookupError: 

===========================================================================
NLTK was unable to find the java file!
Use software specific configuration paramaters or set the JAVAHOME environment variable.
=========================================================================== …
Run Code Online (Sandbox Code Playgroud)

python nlp nltk stanford-nlp python-textprocessing

10
推荐指数
1
解决办法
7176
查看次数

是什么创造了`maxent_treebank_pos_tagger/english.pickle`?

nltk包的内置部分的语音恶搞似乎并没有对我的使用情况进行优化(在这里,例如).这里源代码显示它使用了一个被保存的预训练分类器maxent_treebank_pos_tagger.

创造了maxent_treebank_pos_tagger/english.pickle什么?我猜测那里有一个标记语料库用于训练这个标记器,所以我想我正在寻找(a)标记语料库和(b)基于标记训练标记器的确切代码语料库.

除了大量的谷歌搜索,到目前为止,我试图.pickle直接查看对象,找到其中的任何线索,从这开始

from nltk.data import load
x = load("nltk_data/taggers/maxent_treebank_pos_tagger/english.pickle")
dir(x)
Run Code Online (Sandbox Code Playgroud)

nlp nltk part-of-speech python-2.7

10
推荐指数
1
解决办法
1148
查看次数

如何使用NLTK pos标签获得更好的结果

我只是在学习使用Python的nltk.我试着在各种句子上做pos_tag.但获得的结果并不准确.我如何即兴表达结果?

broke = NN
flimsy = NN
crap = NN
Run Code Online (Sandbox Code Playgroud)

此外,我还有很多额外的词被归类为NN.如何过滤这些以获得更好的结果.

python nltk pos-tagger

7
推荐指数
1
解决办法
4456
查看次数

在NLTK中实例化和使用StanfordTagger

我为这个问题的新手性质道歉 - 我一直试图找出Python包装和名称空间,但更好的观点似乎让我无法理解.也就是说,我想将Python包装器用于斯坦福的词性标注器.我在这里找到文档没有问题,它提供了一个使用示例:

st = StanfordTagger('bidirectional-distsim-wsj-0-18.tagger')
st.tag('What is the airspeed of an unladen swallow ?'.split())
    [('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed', 'NN'), ('of', 'IN'), ('an', 'DT'), ('unladen', 'JJ'), ('swallow', 'VB'), ('?', '.')]
Run Code Online (Sandbox Code Playgroud)

这看起来很棒,但我似乎无法在我的本地Python + NLTK安装中显示正确的命名空间(我有最新的NLTK版本,并在Python 2.6.x以及2.7.x中尝试过以下) :

>>> import nltk
>>> from nltk import *
>>> from nltk.tag import stanford 
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name stanford
Run Code Online (Sandbox Code Playgroud)

我也尝试了这个import语句,结果相同:

>>> from nltk.tag.stanford import StanfordTagger
Traceback (most recent call last): …
Run Code Online (Sandbox Code Playgroud)

python nltk

7
推荐指数
1
解决办法
5110
查看次数

为什么使用nltk的Stanford解析器无法正确解析句子?

我在python中使用nttk的Stanford解析器,并从Stanford Parser和NLTK获得帮助 以建立斯坦福nlp库.

from nltk.parse.stanford import StanfordParser
from nltk.parse.stanford import StanfordDependencyParser
parser     = StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
dep_parser = StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
one = ("John sees Bill")
parsed_Sentence = parser.raw_parse(one)
# GUI
for line in parsed_Sentence:
       print line
       line.draw()

parsed_Sentence = [parse.tree() for parse in dep_parser.raw_parse(one)]
print parsed_Sentence

# GUI
for line in parsed_Sentence:
        print line
        line.draw()
Run Code Online (Sandbox Code Playgroud)

我得到了错误的解析和依赖树,如下例所示,它将'see'视为名词而不是动词.

示例解析树 示例依赖关系树

我该怎么办?当我改变句子时,它完全正常工作,例如(一个='John see Bill').从这里正确的解析树输出可以看到这句话的正确输出

正确输出的示例如下所示:

正确解析

正确的依赖解析树

python parsing nlp nltk stanford-nlp

6
推荐指数
1
解决办法
4232
查看次数

NLTK中的pos_tag不能正确标记句子

我用过这段代码:

# Step 1 : TOKENIZE
from nltk.tokenize import *
words = word_tokenize(text)

# Step 2 : POS DISAMBIG
from nltk.tag import *
tags = pos_tag(words)
Run Code Online (Sandbox Code Playgroud)

标记两句话:约翰非常好.约翰非常好吗?

第一句中的约翰是NN,而第二句中是约翰!那么,如何在不训练后退标记的情况下纠正pos_tag函数呢?

修改后的问题

我在这里看到了NLTK标记器的演示http://text-processing.com/demo/tag/.当我尝试选择"English Taggers&Chunckers:Treebank"或"Brown Tagger"时,我得到了正确的标签.那么如何使用Brown Tagger而不进行培训呢?

nltk

5
推荐指数
1
解决办法
2257
查看次数

词性标注 - NLTK 认为名词是形容词

在下面的代码中,为什么 nltk 认为 'fish' 是形容词而不是名词?

>>> import nltk
>>> s = "a woman needs a man like a fish needs a bicycle"
>>> nltk.pos_tag(s.split())
[('a', 'DT'), ('woman', 'NN'), ('needs', 'VBZ'), ('a', 'DT'), ('man', 'NN'), ('like', 'IN'), ('a', 'DT'), ('fish', 'JJ'), ('needs', 'NNS'), ('a', 'DT'), ('bicycle', 'NN')]
Run Code Online (Sandbox Code Playgroud)

python nltk

5
推荐指数
1
解决办法
6591
查看次数

除非POS是显式的,否则WordNetLemmatizer不会返回正确的引理 - Python NLTK

我将Ted数据集脚本变形为lematizing.我注意到有些奇怪的事情:并非所有的词都被词状化了.说,

selected -> select
Run Code Online (Sandbox Code Playgroud)

哪个是对的.

然而,involved !-> involvehorsing !-> horse除非我明确地输入"V"(动词)属性.

在python终端上,我得到了正确的输出但不在我的代码中:

>>> from nltk.stem import WordNetLemmatizer
>>> from nltk.corpus import wordnet
>>> lem = WordNetLemmatizer()
>>> lem.lemmatize('involved','v')
u'involve'
>>> lem.lemmatize('horsing','v')
u'horse'
Run Code Online (Sandbox Code Playgroud)

代码的相关部分是这样的:

for l in LDA_Row[0].split('+'):
    w=str(l.split('*')[1])
    word=lmtzr.lemmatize(w)
    wordv=lmtzr.lemmatize(w,'v')
    print wordv, word
    # if word is not wordv:
    #   print word, wordv
Run Code Online (Sandbox Code Playgroud)

整个代码在这里.

问题是什么?

python nlp nltk wordnet lemmatization

3
推荐指数
1
解决办法
4081
查看次数

如何在nltk中用hunpos标记文本文件?

有人可以帮我用hunpos标记nltk中的语料库的语法吗?

  1. 我要为hunpos.HunPosTagger模块导入什么?

  2. 我如何HunPosTag语料库?请参见下面的代码。


import nltk 
from nltk.corpus import PlaintextCorpusReader  
from nltk.corpus.util import LazyCorpusLoader  

corpus_root = './'  
reader = PlaintextCorpusReader (corpus_root, '.*')  

ntuen = LazyCorpusLoader ('ntumultien', PlaintextCorpusReader, reader)  
ntuen.fileids()  
isinstance (ntuen, PlaintextCorpusReader)  


# So how do I hunpos tag `ntuen`? I can't get the following code to work.
# please help me to correct my python syntax errors, I'm new to python 
# but i really need this to work. sorry
##from nltk.tag import hunpos.HunPosTagger
ht = HunPosTagger('english.model') …
Run Code Online (Sandbox Code Playgroud)

python corpus nltk pos-tagger

0
推荐指数
1
解决办法
1539
查看次数