我正在浏览斯坦福大学的iOS开发视频并正在完成作业1.
我遇到任务4的问题:
向用户界面添加一个新的文本标签(UILabel),显示已发送到大脑的所有内容(以空格分隔).例如,如果用户输入6.3输入5 + 2*,则此新文本标签将显示6.3 5 + 2*.放置此标签的好地方是使其成为显示文本标签上方的细条.别忘了让C按钮清除.此任务的所有代码都应该在您的Controller中(此模型不需要对您的模型进行任何更改).您不必显示无限数量的操作和操作数,只需合理的数量.
我有UILabel并完成了所有这些工作.我发现我很难做到这一点.任何帮助是极大的赞赏.
(PS请不要发布完整的代码解决方案,因为我想学习如何做,发布代码只会让我的学习变得毫无意义,任何提示和指针都是最好的!谢谢).
我遇到了JAVA地图的问题.我在地图中输入一个对象作为键.然后我修改了键,地图不再将对象视为地图的键.即使对象内部的键已相应修改.
我正在使用CoreLabelStanfordNLP 的对象,但它适用于我猜的一般情况.
Map <CoreLabel, String> myMap = new HashMap...
CoreLabel key = someCreatedCoreLabel
myMap.put(key, someString)
myMap.get(key) != null ----> TRUE
key.setValue("someValue");
myMap.get(key) != null ----> FALSE
Run Code Online (Sandbox Code Playgroud)
我希望我很清楚.问题是为什么最后一个陈述是假的?我不是一个非常有经验的程序员,但我希望它是真的.也许与CoreLabel物体有关?
我检查是否.equals()仍然存在,它确实存在
for(CoreLabel token: myMap.keySet()) {
if(key.equals(token))
System.out.println("OK");
}
Run Code Online (Sandbox Code Playgroud) 我是NLP的新手,我使用Stanford NER工具对一些随机文本进行分类,以提取软件编程中使用的特殊关键字.
问题是,我不知道如何对Stanford NER中的分类器和文本注释器进行更改以识别软件编程关键字.例如:
today Java used in different operating systems (Windows, Linux, ..)
Run Code Online (Sandbox Code Playgroud)
分类结果应如下:
Java "Programming_Language"
Windows "Operating_System"
Linux "Operating_system"
Run Code Online (Sandbox Code Playgroud)
请问如何定制StanfordNER分类器以满足我的需求?
我在这个标记器上做我的POS(词性标注).但是,当我将该部分与我的maven项目结合起来时,它不起作用.有没有办法让我可以直接使用stanford做pos而不使用单独的标记器?我希望输出与此相同.
MaxentTagger tagger = new MaxentTagger("taggers/left3words-wsj-0-18.tagger");
String sample = "Im so happy about my marks";
String tagged = tagger.tagString(sample);
System.out.println(tagged);
Run Code Online (Sandbox Code Playgroud)
输出:Im/NNP so/RB happy/JJ about/IN my/PRP $ marks/NNS
我想根据从斯坦福解析器检索的语法生成句子,但 NLTK 无法解释 PRP$。
from nltk.parse.stanford import StanfordParser
from nltk.grammar import CFG
from nltk.parse.generate import generate
sp=StanfordParser(model_path='/home/aman/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser-3.4-models/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz',path_to_jar='/home/aman/stanford_resource/stanford-parser-full-2014-06-16/stanford-parser.jar',path_to_models_jar='/home/aman/stanford_resource/stanford-postagger-full-2014-08-27/stanford-postagger-3.4.1.jar')
sent1='He killed the tiger in his pants'
parse_result=sp.raw_parse(sent1)
grammar_list=[]
for p in parse_result:
l=p.productions()
grammar_string='\n'.join(map(str,l))
grammar=CFG.fromstring(grammar_string)
#grammar_list.append(grammar)
#for s in generate(grammar,n=3):
# print s
ValueError: Unable to parse line 11: NP -> PRP$ NNS
Expected a nonterminal, found: $ NNS
Run Code Online (Sandbox Code Playgroud)
它怎么能工作。我是否应该专门针对这些语法类别指导 nltk。
我是协议缓冲区的新手,并尝试弄清楚如何在斯坦福 CoreNLP 库中扩展消息类型,如下所述: https: //nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/管道/ProtobufAnnotationSerializer.html
问题:我可以设置扩展字段,但无法获取它。我将问题归结为下面的代码。在原始消息中,字段名称被反序列化消息中的[edu.stanford.nlp.pipeline.myNewField]字段编号替换。101
我如何获取 myNewField 的值?
PS:这篇文章/sf/ask/2017065011/建议它应该像调用一样简单getExtension(MyAppProtos.myNewField)
定制原型
syntax = "proto2";
package edu.stanford.nlp.pipeline;
option java_package = "com.example.my.awesome.nlp.app";
option java_outer_classname = "MyAppProtos";
import "CoreNLP.proto";
extend Sentence {
optional uint32 myNewField = 101;
}
Run Code Online (Sandbox Code Playgroud)
原型测试.java
import com.example.my.awesome.nlp.app.MyAppProtos;
import com.google.protobuf.ExtensionRegistry;
import com.google.protobuf.InvalidProtocolBufferException;
import edu.stanford.nlp.pipeline.CoreNLPProtos;
import edu.stanford.nlp.pipeline.CoreNLPProtos.Sentence;
public class ProtoTest {
static {
ExtensionRegistry registry = ExtensionRegistry.newInstance();
registry.add(MyAppProtos.myNewField);
CoreNLPProtos.registerAllExtensions(registry);
}
public static void main(String[] args) throws InvalidProtocolBufferException {
Sentence originalSentence = Sentence.newBuilder()
.setText("Hello world!")
.setTokenOffsetBegin(0) …Run Code Online (Sandbox Code Playgroud) 我意识到通过包含 props.setProperty("ner.useSUTime", "0"); 观察并解决了这个问题。但是,错误仍然存在。我通过 nuget 添加了 corenlp 3.8,我在 NetStandard2.0 配置中使用 c#visual studio 2017。
我的代码:`
public Dictionary<int, List<Word>> GetPOSFromStandforNLP(string sent)
{
var pos = new Dictionary<int, List<Word>>();
var jarRoot = @"../vendor/stanford-corenlp-3.8.0-models";
// Annotation pipeline configuration
var props = new Properties();
// Annotation pipeline configuration
var props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
props.setProperty("ner.useSUTime", "0");
try
{
CultureInfo ci = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
var curDir = Environment.CurrentDirectory;
Directory.SetCurrentDirectory(jarRoot);
var pipeline = new …Run Code Online (Sandbox Code Playgroud) 通过CoreNLP库,在调用ner()一个CoreLabel我收到一个字符串,指示其命名实体标签(如PERSON或DATE).
但是,我知道无法在一个句子中相互比较令牌.例如:(用反引号包围的标记文本)
`Ellen` PERSON
`Wexler `PERSON
`,` O
`February` DATE
`9` DATE
`,` DATE
`2016` DATE
Run Code Online (Sandbox Code Playgroud)
通过CoreNLP,如何组合人员标签以获取名称Ellen Wexler?或者为了得到日期标签February 9, 2016,或者我最终可以变成Java中的日期/日历对象的另一种表示?我看过这里给出的例子,但是只找到每个核心标签的ner标签.它没有为我提供一种将连续的,相同的ner标签组合在一起的方法.
我试过的:
我写了一个for循环,迭代句子并找到X个连续的,相同的ner标签(所以如果X是2而ner标签是PERSON,它会找到2个连续的PERSON).在这种情况下,就是这样Ellen Wexler.然而,当标点符号发挥作用时,这会打破,因为标点符号(取决于上下文)被赋予其相邻标记的ner标记.此外,必须通过CoreNLP实现此目的.
我的研究: 这个类似的问题尚未得到解答.CoreNLP主页没有提供任何答案,因为它仅提供了有关各个核心标签/令牌分析的示例.
我使用斯坦福依赖解析器(3.9.1)来解析一个句子,我得到的结果如下。
[[(('investigating', 'VBG'), 'nmod', ('years', 'NNS')),
(('years', 'NNS'), 'case', ('In', 'IN')),
(('years', 'NNS'), 'det', ('the', 'DT')),
(('years', 'NNS'), 'amod', ('last', 'JJ')),
(('years', 'NNS'), 'nmod', ('century', 'NN')),
(('century', 'NN'), 'case', ('of', 'IN')),
(('century', 'NN'), 'det', ('the', 'DT')),
(('century', 'NN'), 'amod', ('nineteenth', 'JJ')),
(('investigating', 'VBG'), 'nsubj', ('Planck', 'NNP')),
(('investigating', 'VBG'), 'aux', ('was', 'VBD')),
(('investigating', 'VBG'), 'dobj', ('problem', 'NN')),
(('problem', 'NN'), 'det', ('the', 'DT')),
(('problem', 'NN'), 'nmod', ('radiation', 'NN')),
(('radiation', 'NN'), 'case', ('of', 'IN')),
(('radiation', 'NN'), 'amod', ('black-body', 'JJ')),
(('radiation', 'NN'), 'acl', ('posed', …Run Code Online (Sandbox Code Playgroud) (注意:我知道之前有关于这个问题的帖子(例如这里或这里,但它们已经很老了,我认为过去几年 NLP 取得了相当大的进展。)
我正在尝试使用 Python 中的自然语言处理来确定句子的时态。
是否有易于使用的软件包?如果没有,我需要如何在 TextBlob、StanfordNLP 或 Google Cloud Natural Language API 中实施解决方案?
TextBlob 似乎最容易使用,我设法列出了 POS 标签,但我不确定如何将输出转换为“时态预测值”或只是对时态的最佳猜测。此外,我的文本是西班牙语,所以我更喜欢使用支持西班牙语的 GoogleCloud 或 StanfordNLP(或任何其他易于使用的解决方案)。
我还没有设法使用 StanfordNLP 的 Python 接口。
谷歌云自然语言 API 似乎提供了我所需要的(见这里,但我还没有设法找出如何获得这个输出。我已经使用谷歌云 NLP 进行其他分析(例如实体情感分析),它有工作,所以我相信如果我找到正确的使用示例,我可以设置它。
文本块示例:
from textblob import TextBlob
from textblob.taggers import NLTKTagger
nltk_tagger = NLTKTagger()
blob = TextBlob("I am curious to see whether NLP is able to predict the tense of this sentence., pos_tagger=nltk_tagger)
print(blob.pos_tags)
Run Code Online (Sandbox Code Playgroud)
-> 这会打印 pos 标签,我如何将它们转换为对这句话时态的预测?
Google Cloud NLP 示例(设置凭据后):
from google.cloud …Run Code Online (Sandbox Code Playgroud) python nlp part-of-speech stanford-nlp google-cloud-platform