【问题标题】:Sentence detection - In first sentence find two NP and then go to the next sentence句子检测 - 在第一句中找到两个 NP,然后转到下一句
【发布时间】:2018-09-25 23:20:16
【问题描述】:

我有一个带注释的数据集,首先我使用来自 nltk 的 sent_tokenizer 来检测句子。现在我必须定义一个特征,比如检查 i 和 j(名词短语)是否都在第一句话中并做一些工作,然后它应该转到下一个句子并再次定义 i 和 j 并做同样的工作。在python中怎么做?

这是我从数据集中检测到的第一句话:

در
همین
حال
،
<coref coref_coref_class="set_0" coref_mentiontype="ne" markable_scheme="coref" coref_coreftype="ident">
 نجیب
 الله
 خواجه
 عمری
،
</coref>
<coref coref_coref_class="set_0" coref_mentiontype="np" markable_scheme="coref" coref_coreftype="ident">

سرپرست
وزارت
تحصیلات
عالی
افغانستان
</coref>
گفت
که
در
سه
ماه
گذشته
در
۳۳
ولایت
کشور
.

现在 - 如果检测到第一句话,如何编写代码。它检查 i 和 j 是否在一个句子中返回 True。然后转到下一句。

 for sentence in sent_tokenize(text):
    print(sentence) # it will print all the sentences
    if i_NP ... and j_NP:
         return True

【问题讨论】:

    标签: python nltk


    【解决方案1】:

    听起来您实际上想要yield 结果而不是return 它。 Return 打破了函数,而 yield 将一次返回一个项目。也许是这样的:

    if all([x in sentence for x in [i_NP, j_NP]]):
        yield sentence
    

    if 语句检查所有单词是否在句子中,如果它们是则从函数中产生句子

    【讨论】:

    • 它如何知道 i_NP 和 j_NP 的值。我试过你的代码,它没有打印任何错误和结果。
    • 我的印象是您正在定义 i_NP 和 j_NP,这是更大函数的一部分。这就是这将起作用的背景。如果您只想打印结果而不生成结果,请将yield 更改为print(sentence)
    • ok,但是如何知道一句话中i_NP和j_NP的值。我不能手动给它,因为在每个句子中,值都会改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多