我目前正在我的大学学习自然语言处理课程,但仍然对一些基本概念感到困惑.我从统计自然语言处理基础书中得到了POS标记的定义:
标记是用一个适当的词性标记(或标记)句子中每个单词的任务.我们决定每个单词是名词,动词,形容词还是其他.
但是我在书中找不到浅层解析的定义,因为它还将浅层解析描述为POS标记的一个实用程序.所以我开始在网上搜索,没有发现浅层解析的直接解释,但在维基百科:
浅解析(也是分块,"轻解析")是对句子的分析,其标识成分(名词组,动词,动词组等),但没有指定它们的内部结构,也没有指定它们在主句中的作用.
我坦率地看不出差别,但可能是因为我的英语或者只是我不理解简单的基本概念.任何人都可以解释浅层解析和POS标记之间的区别吗?浅层解析通常也称为浅层语义解析吗?
谢谢你.
我刚开始使用词性标注器,我遇到了很多问题.
我用以下内容开始了POS标记:
import nltk
text=nltk.word_tokenize("We are going out.Just you and me.")
Run Code Online (Sandbox Code Playgroud)
当我想要打印时'text'
,会发生以下情况:
print nltk.pos_tag(text)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "F:\Python26\lib\site-packages\nltk\tag\__init__.py", line 63, in pos_tag
tagger = nltk.data.load(_POS_TAGGER)
File "F:\Python26\lib\site-packages\nltk\data.py", line 594, in load
resource_val = pickle.load(_open(resource_url))
File "F:\Python26\lib\site-packages\nltk\data.py", line 673, in _open
return find(path).open()
File "F:\Python26\lib\site-packages\nltk\data.py", line 455, in find
raise LookupError(resource_not_found)`
LookupError:
Resource 'taggers/maxent_treebank_pos_tagger/english.pickle' not
found. Please use the NLTK Downloader to obtain the resource:
>>> nltk.download().
Searched in:
- …
Run Code Online (Sandbox Code Playgroud) 有这个:
text = word_tokenize("The quick brown fox jumps over the lazy dog")
Run Code Online (Sandbox Code Playgroud)
并运行:
nltk.pos_tag(text)
Run Code Online (Sandbox Code Playgroud)
我明白了:
[('The', 'DT'), ('quick', 'NN'), ('brown', 'NN'), ('fox', 'NN'), ('jumps', 'NNS'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'NN'), ('dog', 'NN')]
Run Code Online (Sandbox Code Playgroud)
这是不正确的.quick brown lazy
句子中的标签应为:
('quick', 'JJ'), ('brown', 'JJ') , ('lazy', 'JJ')
Run Code Online (Sandbox Code Playgroud)
我想要POStag一个英文句子并做一些处理.我想使用openNLP.我安装了它
当我执行命令
I:\Workshop\Programming\nlp\opennlp-tools-1.5.0-bin\opennlp-tools-1.5.0>java -jar opennlp-tools-1.5.0.jar POSTagger models\en-pos-maxent.bin < Text.txt
Run Code Online (Sandbox Code Playgroud)
它为Text.txt中的输入提供输出POSTagging
Loading POS Tagger model ... done (4.009s)
My_PRP$ name_NN is_VBZ Shabab_NNP i_FW am_VBP 22_CD years_NNS old._.
Average: 66.7 sent/s
Total: 1 sent
Runtime: 0.015s
Run Code Online (Sandbox Code Playgroud)
我希望它安装得当吗?
现在我如何从java应用程序内部执行此操作?我已将openNLPtools,jwnl,maxent jar添加到项目中,但我如何调用POStagging?
当我分块文本时,我在输出中得到了很多代码
NN, VBD, IN, DT, NNS, RB
.是否有某个列表记录在哪里告诉我这些的含义?我试过谷歌搜索nltk chunk code
nltk chunk grammar
nltk chunk tokens
.
但我无法找到任何解释这些代码含义的文档.
是否存在现有的C++ NLP API?我发现的最接近的是CLucene
,一个端口Lucene
.但是,它似乎有点过时,文档远未完成.
理想情况下,这个/这些API将允许标记化,词干化和PoS标记.
最近我接触了NLP,我尝试使用NLTK和TextBlob来分析文本.我想开发一个分析旅行者评论的应用程序,因此我必须管理很多用不同语言编写的文本.我需要做两个主要操作:POS标记和词形还原.我已经看到在NLTK中有可能为这样的句子标记化选择正确的语言:
tokenizer = nltk.data.load('tokenizers/punkt/PY3/italian.pickle')
Run Code Online (Sandbox Code Playgroud)
我还没有找到用不同语言设置POS Tagging和Lemmatizer语言的正确方法.如何为非英语文本(如意大利语,法语,西班牙语或德语)设置正确的语料库/词典?我也看到有可能导入"TreeBank"或"WordNet"模块,但我不明白我如何使用它们.否则,我在哪里可以找到各自的语料库?
你能给我一些建议或参考吗?请注意我不是NLTK的专家.
非常感谢.
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next
WARNING: Untokenizable: ? (U+FFFD, decimal: 65533)
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next
WARNING: Untokenizable: ? (U+FFFD, decimal: 65533)
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next
WARNING: Untokenizable: ? (U+FFFD, decimal: 65533)
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next
WARNING: Untokenizable: ? (U+FFFD, decimal: 65533)
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next
WARNING: Untokenizable: ? (U+FFFD, decimal: 65533)
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next
WARNING: Untokenizable: ? (U+FFFD, decimal: 65533)
Mar 9, …
Run Code Online (Sandbox Code Playgroud) 我尝试使用下面的斯坦福解析器在Scala中标记一个句子
val lp:LexicalizedParser = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz");
lp.setOptionFlags("-maxLength", "50", "-retainTmpSubcategories")
val s = "I love to play"
val parse :Tree = lp.apply(s)
val taggedWords = parse.taggedYield()
println(taggedWords)
Run Code Online (Sandbox Code Playgroud)
我的错误类型不匹配; 发现:java.lang.String required:java.util.List [_ <:edu.stanford.nlp.ling.HasWord]在行中的val解析:Tree = lp.apply(s)
我不知道这是否是正确的做法.在Scala中有没有其他简单的方法来标记句子?
我试图在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
pos-tagger ×10
nlp ×8
nltk ×5
python ×4
stanford-nlp ×3
java ×2
api ×1
c++ ×1
opennlp ×1
python-2.7 ×1
scala ×1
text-parsing ×1