我想从图像中显示的文本中标记句子,包括(i.E.)括号中的句子。它分割图像中以绿色显示的句子。
我已经尝试了nltk tokenised函数和正则表达式。你能给我一个建议吗?谢谢。
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摄氏度。
所有这些都不是混乱的混乱,他们是简单的事实和数字,如果我们不改变我们的行为,所有这些都指向灾难。请人们醒来!
答案 0 :(得分:2)
这几乎可以满足您的需求
sentences = re.split(r'(?<=[a-zA-Z]{2,}\)?\.) |\(', text)
也许你可以替换尾随&#34;)。&#34;用&#34;。&#34;。
虽然在句子中不会匹配括号,但需要添加2个或条件!和?为了便于阅读,我只是省略了它们。
答案 1 :(得分:0)
识别句子边界是一个棘手的问题,并且nltk的统计标记器在许多奇怪的情况下做得很好。手动识别句子边界可能会处理此错误,但会在其他地方犯更多错误。如果您担心像这样的小系统错误,我会预处理文本以帮助标记器。
在这种情况下,问题是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)