首页 > 解决方案 > 如何跳过换行符 /n 或没有意义的句子?

问题描述

我使用 spacy 来标记并尝试从文本子集中获取一些单词统计信息,但它也会打印新行 \n 和短句或没有意义的句子。我该如何摆脱这些?

nlp = spacy.load("en_core_web_md")
def describe_sentence_stats(text):
    doc = nlp(text)
    sent_df = pd.DataFrame()
    for i, sent in enumerate(doc.sents):
        sent_df.loc[i, 'sentence'] = sent.text
        sent_df.loc[i, 'num_words'] = len([token for token in sent])
                                          
    return sent_df

sentences = describe_sentence_stats(example_text)

我想摆脱这些类型的输出:

一些输出

标签: nlpspacydata-cleaning

解决方案


这是一个垃圾进,垃圾出的案例。根据您的输出,您的输入有如下部分:

l
i i
1 i
1 i i i i i

这很奇怪。您应该在将文本提供给 spaCy 之前对其进行预处理,方法是删除太短的行,或者具有 < 5 个不同字符的行,或者空格数是字符数的 50% 等。

当您将文本提供给 spaCy 时,它会将输入视为不可侵犯的,并且永远不会丢弃它的任何部分。结果,即使是像那些行这样的“奇怪的垃圾”也必须在某个句子中并以标记的形式出现。

有时在 spaCy 本身中过滤类似的东西可能更容易,但在前面的步骤中通常更容易做到。在您的示例中,由于问题文本似乎在孤立的行中,因此我绝对建议您尝试进行预处理。


推荐阅读