【问题标题】:Sentence tokenization w/o relying on punctuations and capitalizations不依赖标点符号和大写的句子标记化
【发布时间】:2022-01-25 21:43:42
【问题描述】:

是否有一种可能的方法可以从没有任何标点符号和/或全部小写的段落中提取句子/句子标记化?我们特别需要能够将段落拆分为句子,同时预期输入的段落不正确的最坏情况。

例子:

this is a sentence this is a sentence this is a sentence this is a sentence this is a sentence 进入 ["this is a sentence", "this is a sentence", "this is a sentence", "this is a sentence", "this is a sentence"]

到目前为止,我们尝试过的句子分词器似乎依赖于标点符号和真正的大小写: 使用 nltk.sent_tokenize "This is a sentence. This is a sentence. This is a sentence" 进入 ['This is a sentence.', 'This is a sentence.', 'This is a sentence']

【问题讨论】:

    标签: python nlp nltk spacy linguistics


    【解决方案1】:

    这是一个难题,您最好尝试弄清楚如何处理不完美的句子分割。也就是说,有一些方法可以解决这个问题。

    您可以尝试使用序列标注器从头开始训练句子分割器。 spaCy 中的判词器就是这样一种模型。这应该很容易配置,但是没有标点符号或大小写,我不确定它的效果如何。

    您可以做的另一件事是使用将文本分割成句子的解析器。 spaCy 解析器会执行此操作,但其训练数据是正确大小写和标点的,因此您需要训练自己的模型来执行此操作。您可以在正常句子上使用解析器的输出,将所有小写字母和标点符号都删除,作为训练数据。通常这种训练数据不如原始数据,但考虑到您的特定需求,至少应该很容易获得。

    其他可能性涉及使用模型添加标点符号和大小写,但在这种情况下,您会遇到模型中的错误会加剧的问题,因此它可能比直接预测句子边界更难。

    【讨论】:

      【解决方案2】:

      我唯一能想到的就是使用基于通常开始或结束句子的单词的统计分类器。这不一定适用于您的示例(我认为在这种情况下只有完整的语法分析才能识别句子边界),但您可能会朝着您的目标迈进。

      只需构建一个通常出现在句子开头的单词列表。 the 或 this 之类的词可能会在该列表中占据很高的位置;计算这个词在你的训练文本中出现了多少次,其中有多少次出现在句子的开头。然后在结尾处做同样的事情——在这里你永远不应该得到 the,因为除了最做作的例子之外,它不能结束一个句子。

      通过这两个列表,检查您的文本并确定您是否有一个可能结束一个句子的单词,然后是一个可能开始一个句子的单词;如果是,你有一个潜在句子边界的候选者。在您的示例中, this 可能是一个句子的开头,而 sentence 可能是句子的结尾词。显然,它是否有效取决于您的数据。如果您喜欢冒险,请使用词性标签而不是实际单词;那么你的列表会更短,而且它应该仍然可以正常工作。

      但是,您可能会发现您也有短语边界(因为每个句子都以一个短语开头,并且一个句子的最后一个短语的结尾也将与句子的结尾重合)。如果不实际尝试,很难预测它是否会起作用,但它应该快速且易于实施,并且聊胜于无。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多