【问题标题】:How to tokenise "i.e." sentences in parenthesis? (Python)如何标记“即”括号里的句子? (Python)
【发布时间】:2015-03-27 14:56:35
【问题描述】:

我想从文本中标记句子,如图所示,包括在 (i.E.) 括号中的句子。它分割图像中以绿色显示的句子。

我已经尝试过 nltk 标记化函数和正则表达式。你能给我建议吗?谢谢。

import nltk
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
infile = open("textfile.txt", "r")

for line in infile:
    line =  line.strip()
    print tokenizer.tokenize(line)
    
infile.close()

#partial RE code
sentences  = re.split(r'(?<=!w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?)\s', text)

这里是示例文本:

是的,它是真实的,并且有无数证据表明世界正在我们耳边大声疾呼人类正在造成的气候变化。气候变化和混乱步伐加快的证据是显而易见的。首先,全球的温度计都有一个平均温度读数,自 1880 年测量以来,该读数上升到前所未有的水平。自 1958 年以来测量的二氧化碳水平也一直在上升。从含有其他时代空气的冰中得出的结论是,二氧化碳含量是 60 万年来最高的。从化石记录中,科学家们得出结论,人类可能在全球所有大型脊椎动物(即猛犸象、野牛等)的灭绝中发挥了重要作用。不相信二氧化碳变暖效应的人,必须停止相信事物并开始寻找,金星是一个与地球非常相似的行星,二氧化碳浓度非常高,因此它的温度超过 400 摄氏度。

所有这些都不是乱七八糟的东西,它们都是简单的事实和数据,如果我们不改变我们的行为,所有这些都指向灾难。请人们醒来!

【问题讨论】:

  • 它不会解决你的问题,但不要一次一行地输入句子标记器;它需要更多的上下文来正确识别句子边界。将整个文件或至少整个段落提供给它。

标签: string python-2.7 nltk tokenize


【解决方案1】:

这应该可以满足您的需求

sentences  = re.split(r'(?<=[a-zA-Z]{2,}\)?\.) |\(', text)

也许你可以替换尾随的“)。”用“。”。

这不会匹配句子中的括号,需要再添加2个或条件!和 ?。我只是为了可读性而省略了它们。

【讨论】:

    【解决方案2】:

    识别句子边界是一个棘手的问题,nltk 的统计标记器可以很好地处理许多奇怪的情况。手动识别句子边界可能会解决 this 错误,但会在其他地方犯更多错误。如果您担心这样的小系统错误,我会预处理文本以帮助标记器。

    在这种情况下,问题在于i.e. 通常在后面加上逗号(并且没有大写,但小写并不能解决问题):(i.e., mammoths, bisons etc.)。因此,您可以通过实际上复制编辑文本来获得正确的标记化,以添加缺少的逗号:

    text = re.sub(r"\b(i\.e\.)(\s+)", r"\1,\2", text, flags=re.IGNORECASE)
    tokens = tokenizer.tokenize(text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 2019-04-03
      • 2022-12-17
      • 2020-12-24
      • 2015-09-25
      • 2017-01-01
      • 2018-01-21
      相关资源
      最近更新 更多