- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在复制本文中描述的算法:https://arxiv.org/pdf/1811.11008.pdf
在最后一页,它使用以下示例描述了提取在标记为“NP JJ”的语法中定义的叶: 营业利润率为 8.3%,而一年前为 11.8%。
我期待看到一片标有“NP JJ”的叶子,但我没有。我正在纠结为什么(对正则表达式来说相对较新。)
def split_sentence(sentence_as_string):
''' function to split sentence into list of words
'''
words = word_tokenize(sentence_as_string)
return words
def pos_tagging(sentence_as_list):
words = nltk.pos_tag(sentence_as_list)
return words
def get_regex(sentence, grammar):
sentence = pos_tagging(split_sentence(sentence));
cp = nltk.RegexpParser(grammar)
result = cp.parse(sentence)
return result
example_sentence = "Operating profit margin was 8.3%, compared to 11.8% a year earlier."
grammar = """JJ : {< JJ.∗ > ∗}
V B : {< V B.∗ >}
NP : {(< NNS|NN >)∗}
NP P : {< NNP|NNP S >}
RB : {< RB.∗ >}
CD : {< CD >}
NP JJ : : {< NP|NP P > +(< (>< .∗ > ∗ <) >) ∗ (< IN >< DT > ∗ < RB > ∗ < JJ > ∗ < NP|NP P >) ∗ < RB > ∗(< V B >< JJ >< NP >)∗ < V B > (< DT >< CD >< NP >) ∗ < NP|NP P > ∗ < CD > ∗ < .∗ > ∗ < CD > ∗| < NP|NP P >< IN >< NP|NP P >< CD >< .∗ > ∗ <, >< V B > < IN >< NP|NP P >< CD >}"""
grammar = grammar.replace('∗','*')
tree = get_regex(example_sentence, grammar)
print(tree)
最佳答案
首先看How to use nltk regex pattern to extract a specific phrase chunk?
让我们看看句子的 POS 标签是什么:
from nltk import word_tokenize, pos_tag
text = "Operating profit margin was 8.3%, compared to 11.8% a year earlier."
pos_tag(word_tokenize(text))
[('Operating', 'NN'),
('profit', 'NN'),
('margin', 'NN'),
('was', 'VBD'),
('8.3', 'CD'),
('%', 'NN'),
(',', ','),
('compared', 'VBN'),
('to', 'TO'),
('11.8', 'CD'),
('%', 'NN'),
('a', 'DT'),
('year', 'NN'),
('earlier', 'RBR'),
('.', '.')]
JJ
在任何标签中
JJ
在该句子中的任何 POS 中标记。
NP JJ
不是最终目标;最终目标是生产
UP
或
DOWN
基于一些启发式的标签。
UP
/DOWN
使用 一些启发式方法 UP
标记句子/Down
在 (2b) 2b. extract another pattern that tells us about the performance indicator and numeric values.
CD NN
从
('8.3', 'CD'), ('%', 'NN')
('11.8', 'CD'), ('%', 'NN')
patterns = """
PERCENT: {<CD><NN>}
"""
PChunker = RegexpParser(patterns)
PChunker.parse(pos_tag(word_tokenize(text)))
Tree('S', [('Operating', 'NN'), ('profit', 'NN'), ('margin', 'NN'), ('was', 'VBD'),
Tree('PERCENT', [('8.3', 'CD'), ('%', 'NN')]),
(',', ','), ('compared', 'VBN'), ('to', 'TO'),
Tree('PERCENT', [('11.8', 'CD'), ('%', 'NN')]),
('a', 'DT'), ('year', 'NN'), ('earlier', 'RBR'), ('.', '.')])
- Identify signal that the sentence has a pattern that can tell use about the ultimate label.
<PERCENT> compared to <PERCENT>
是一个很好的模式,所以让我们尝试对其进行编码。
compared to
有标签
VBN TO
从
('8.3', 'CD'),
('%', 'NN'),
(',', ','),
('compared', 'VBN'),
('to', 'TO'),
('11.8', 'CD'),
('%', 'NN'),
patterns = """
PERCENT: {<CD><NN>}
P2P: {<PERCENT><.*>?<VB.*><TO><PERCENT>}
"""
PChunker = RegexpParser(patterns)
PChunker.parse(pos_tag(word_tokenize(text)))
Tree('S', [('Operating', 'NN'), ('profit', 'NN'), ('margin', 'NN'), ('was', 'VBD'),
Tree('P2P', [
Tree('PERCENT', [('8.3', 'CD'), ('%', 'NN')]),
(',', ','), ('compared', 'VBN'), ('to', 'TO'),
Tree('PERCENT', [('11.8', 'CD'), ('%', 'NN')])]
),
('a', 'DT'), ('year', 'NN'), ('earlier', 'RBR'), ('.', '.')]
)
performance indicator
的信号
operating profit margin
的存在可能是一个很好的信号,即
from nltk import word_tokenize, pos_tag, RegexpParser
patterns = """
PERCENT: {<CD><NN>}
P2P: {<PERCENT><.*>?<VB.*><TO><PERCENT>}
"""
PChunker = RegexpParser(patterns)
text = "Operating profit margin was 8.3%, compared to 11.8% a year earlier."
indicators = ['operating profit margin']
for i in indicators:
if i in text.lower():
print(PChunker.parse(pos_tag(word_tokenize(text))))
(S
Operating/NN
profit/NN
margin/NN
was/VBD
(P2P
(PERCENT 8.3/CD %/NN)
,/,
compared/VBN
to/TO
(PERCENT 11.8/CD %/NN))
a/DT
year/NN
earlier/RBR
./.)
UP
/
DOWN
?
2b. Use the extracted extracted numeric values to determine the directionality UP / DOWN using some heuristics
PERCENT VBN TO PERCENT earlier
,我们说第二个百分比是一个较旧的数字。
import nltk
from nltk import word_tokenize, pos_tag, RegexpParser
patterns = """
PERCENT: {<CD><NN>}
P2P: {<PERCENT><.*>?<VB.*><TO><PERCENT><.*>*<RBR>}
"""
def traverse_tree(tree, label=None):
# print("tree:", tree)
for subtree in tree:
if type(subtree) == nltk.tree.Tree and subtree.label() == label:
yield subtree
PChunker = RegexpParser(patterns)
parsed_text = PChunker.parse(pos_tag(word_tokenize(text)))
for p2p in traverse_tree(parsed_text, 'P2P'):
print(p2p)
(P2P
(PERCENT 8.3/CD %/NN)
,/,
compared/VBN
to/TO
(PERCENT 11.8/CD %/NN)
a/DT
year/NN
earlier/RBR)
UP
/
DOWN
标签?
import nltk
from nltk import word_tokenize, pos_tag, RegexpParser
patterns = """
PERCENT: {<CD><NN>}
P2P: {<PERCENT><.*>?<VB.*><TO><PERCENT><.*>*<RBR>}
"""
PChunker = RegexpParser(patterns)
def traverse_tree(tree, label=None):
# print("tree:", tree)
for subtree in tree:
if type(subtree) == nltk.tree.Tree and subtree.label() == label:
yield subtree
def labelme(text):
parsed_text = PChunker.parse(pos_tag(word_tokenize(text)))
for p2p in traverse_tree(parsed_text, 'P2P'):
# Check if the subtree ends with "earlier".
if p2p.leaves()[-1] == ('earlier', 'RBR'):
# Check if which percentage is larger.
percentages = [float(num[0]) for num in p2p.leaves() if num[1] == 'CD']
# Sanity check that there's only 2 numbers from our pattern.
assert len(percentages) == 2
if percentages[0] > percentages[1]:
return 'DOWN'
else:
return 'UP'
text = "Operating profit margin was 8.3%, compared to 11.8% a year earlier."
labelme(text)
labelme()
来捕捉它们吗?以上? **
关于python - 如何使用 NLTK 正则表达式模式用 UP/DOWN 指标注释财经新闻?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61756189/
所以`MKAnnotation's。有趣的东西。 我的问题: 注释的标题和副标题有什么区别?这对注释的视觉组件有何影响? MKPinAnnotationView 和 MKAnnotationView
我正在使用 JBoss 工具将 DB 模式反向工程到 POJO 中。具体来说,我在 hibernatetool ANT 任务中使用了 hbm2java 选项。在 hbm2java 选项下,您可以指定
假设我有这段文字: cat file /* comment */ not a comment /* another comment */ /* delete this * /* multiline
我明白,如果你///在类、字段、方法或属性上方 Visual Studio 将开始为您建立 XML 样式的注释。 但是,我在哪里可以为我的命名空间和/或库添加 XML 注释... 例如: .NET F
int API_VERSION = 21; @TargetApi(API_VERSION)在Android中用于指定该方法/类支持API_VERSION及以下。 我们是否可以镜像类似的东西,指定仅支持
Closed. This question needs to be more focused。它当前不接受答案。
假设我有一个界面如下。 public interface MyInterface{ /** * This method prints hello */ void sayHello();
我已将 Jboss 应用程序迁移到 WebSphere Liberty。我必须删除所有 Jboss 引用库。在这样做的同时,我在某些注释中面临问题。 Jboss 应用程序使用 @SecurityDom
在本教程中,您将了解 JavaScript 注释,为什么要使用它们以及在示例的帮助下如何使用它们。 JavaScript 注释是程序员可以添加的提示,以使代码更易于阅读和理解。JavaScri
我正在建立一个博客,为了发表评论,我有这个 CSS。 #comments { position:absolute; border: 1px solid #900; border-width: 1
我正在尝试在单元格中插入评论。我正在尝试按照代码进行评论,但它没有在创建的 excel 中显示评论。我正在创建 .xls 扩展名。 $objPHPExcel->getActiveSheet()->ge
我正在使用 TS 在 MarionetteJS 上编写项目,我想使用注释来注册路由。例如: @Controller class SomeController { @RouteMapping("so
我有一个应用程序可以在页面上生成大量注释。用户可以单击页面上的任意位置以创建快速注释(例如 Acrobat Pro)可以在一般 中使用一些 javascript 行添加和删除这些注释
是否有 JavaScript 注释? 当然 JavaScript 没有它们,但是是否有额外的库或建议的语言扩展,例如 @type {folder.otherjsmodule.foo} function
Java 中注解的目的是什么?我有一个模糊的想法,认为它们介于注释和实际代码之间。它们在运行时会影响程序吗? 它们的典型用法是什么? 它们是 Java 独有的吗?有 C++ 等价物吗? 最佳答案 注解
其实我们在 Ruby 基础语法 已经比较详细的介绍了 Ruby 语言中的注释 Ruby 解释器会忽略注释语句 注释会对 Ruby 解释器隐藏一行,或者一行的一部分,或者若干行。 Ruby 中的注
我正在 try catch VBA 注释。到目前为止,我有以下内容 '[^";]+\Z 它捕获以单引号开头但在字符串结尾之前不包含任何双引号的任何内容。即它不会匹配双引号字符串中的单引号。 dim s
有没有办法在'svn commit'上将提交注释添加到更改的文件中。有人告诉我有一种方法可以用 cvs 做到这一点,但我们使用 svn。目前,我们使用“$Revision”关键字将修订号添加到更改的文
我正在尝试通过 ManyToMany 注释自动对报告的结果进行排序 @OrderBy : /** * @ORM\ManyToMany(targetEntity="Artist", inversedB
我正在使用 JBoss 5 GA,我创建了一个测试 session bean 和本地接口(interface)。我创建了一个 servlet 客户端。我尝试使用 @EJB 将接口(interface)
我是一名优秀的程序员,十分优秀!