当前位置: 首页 > 知识库问答 >
问题:

使用nltk(非正则表达式)提取引文/引文

晏富
2023-03-14

句子的输入列表:

sentences = [
    """Well, I've tried to say "How Doth the Little Busy Bee," but it all came different!""",
    """Alice replied in a very melancholy voice. She continued, 'I'll try again.'"""
]

所需输出:

How Doth the Little Busy Bee,
I'll try again.

是否有一种方法可以使用内置或第三方标记器使用nltk提取引用(可以以单引号和双引号显示)?

我曾尝试使用sexprotokenizertokenizer作为parens值提供单引号和双引号,但结果与预期相差甚远,例如:

In [1]: from nltk import SExprTokenizer
    ...: 
    ...: 
    ...: sentences = [
    ...:     """Well, I've tried to say "How Doth the Little Busy Bee," but it all came different!""",
    ...:     """Alice replied in a very melancholy voice. She continued, 'I'll try again.'"""
    ...: ]
    ...: 
    ...: tokenizer = SExprTokenizer(parens='""', strict=False)
    ...: for sentence in sentences:
    ...:     for item in tokenizer.tokenize(sentence):
    ...:         print(item)
    ...:     print("----")
    ...:     
Well,
I've
tried
to
say
"
How
Doth
the
Little
Busy
Bee,
"
 but it all came different!
----
Alice replied in a very melancholy voice. She continued, 'I'll try again.'

有类似这样和这样的线程,但它们都建议使用基于正则表达式的方法,但是,我很好奇这是否只能用nltk来解决-听起来像是自然语言处理中的常见任务。

共有1个答案

阎嘉荣
2023-03-14

在引擎盖下,SExprTokenzer也是一种基于正则表达式的方法,从您链接到的源代码中可以看出。
从源代码中还可以看出,作者显然没有考虑打开和关闭“paren”用相同的字符表示。嵌套的深度在同一迭代中增加和减少,因此标记器看到的引用是空字符串。

我认为,识别引号在NLP中并不常见。人们使用引号的方式很多(特别是当你使用不同的语言时…),因此,用稳健的方法很难做到正确。对于许多NLP应用程序,引用只是被忽略了,我想说。。。

 类似资料:
  • 我想做的是提取单引号或双引号之间的所有值。 假设我有以下值。 所需的输出为: 我应该如何编写正则表达式(使用一个正则表达式一次提取所有所需的值),以获得包含在第一个和最后一个引号中的整个文本? p、 我想使用方法

  • 问题内容: 我想从一般的HTML页面中提取所有文本(是否显示)。 我想 删除 任何HTML标记 任何JavaScript 任何CSS样式 是否有一个正则表达式(一个或多个)可以实现? 问题答案: 您不能真正用正则表达式解析HTML。太复杂了。RE根本无法正确处理部分。此外,某些常见的HTML之类的东西将在浏览器中作为适当的文本工作,但可能会使天真的RE感到困惑。 有了合适的HTML解析器,您会更快

  • 问题内容: 我写了以下正则表达式来标记某些短语模式 此模式将正确标记短语,例如: 并使用2个短语给出所需的输出: 披萨很好 意大利面不好 但是,如果我的句子是这样的: 仅匹配短语: 而不是所需的: 我如何在第二个示例中也加入正则表达式模式? 问题答案: 首先,让我们看一下NLTK提供的POS标签: (注意:以上是NLTK v3.1的输出,旧版本可能有所不同) 您实际上想要捕获的是: NN VBD

  • 我正在尝试匹配这些字符串: 单引号中不能包含双引号 双引号中没有双引号 单引号内的单引号-单引号只能包含内部的文本 我想出了以下正则表达式: 但它不起作用。

  • 此问题与RegEx有关:在引号之间抓取值 最佳答案中的正则表达式 用 Debuggex演示 还匹配以转义双引号开头的字符串。我试图将定义扩展到使用否定查找。 Debuggex演示 但这不会改变匹配模式中的任何内容。关于如何将转义单引号/双引号作为起始模式排除,有什么建议吗? 我想在支持regex lookback的nedit中使用它作为突出显示模式。 所需匹配的示例:

  • 我有一个非常好的正则表达式,它从文本中选择引用: 但是我需要一个正则表达式,它从没有引号的文本中选择引号。 例如,我有: 鲸鱼包括八个现存的家族:“鲸豚科”(白鲸),“鲸豚科”(露脊鲸),“鲸豚科”(侏儒露脊鲸),“白鲸科”(灰鲸),“独角鲸科”(白鲸和独角鲸),“抹香鲸科”(抹香鲸)。。。 我需要在引号之间提取文本: 龟甲翅目,龟甲翅目,龟甲翅目,... 要提取括号之间的文本,我使用正则表达式: