首页 > 解决方案 > 如何以 (name): (sentence)\n(name): 格式捕获文件中的所有句子

问题描述

我有格式为的成绩单文件

(name): (sentence)\n (<-- 这个模式可以有多个)

(姓名): (句子)\n
(句子)\n

等等。我需要所有的句子。到目前为止,我已经通过对文件中的名称进行硬编码来使其工作,但我需要它是通用的。

utterances = re.findall(r'(?:CALLER: |\nCALLER:\nCRO: |\nCALLER:\nOPERATOR: |\nCALLER:\nRECORDER: |RECORDER: |CRO: |OPERATOR: )(.*?)(?:CALLER: |RECORDER : |CRO: |OPERATOR: |\nCALLER:\n)', raw_calls, re.DOTALL)

Python 3.6 使用 re. 或者,如果有人知道如何使用 spacy 做到这一点,那将是一个很大的帮助,谢谢。

我想在一个空语句之后抓住 \n ,并将它放在自己的字符串中。例如,我想我只需要抓住最后给出的磁带信息,因为我想不出一种方法来区分这句话是否是某人演讲的一部分。有时,行首和冒号之间的单词不止一个。

模拟数据:

CRO:你离世贸中心有多远,大约有多少个街区?三四个街区?

63FDNY 911 通话记录 - EMS - 第 1 部分 9-11-01

呼叫者:

CRO:不客气。谢谢你。

接线员:再见。

CRO:再见。

记录员:磁带的前一部分在 0913 时 36 秒结束。

该磁带将在 B 面继续。

操作员纽维尔:等等。

标签: pythonregexspacy

解决方案


您可以使用前瞻表达式在行首查找名称的相同模式,并后跟冒号:

s = '''CRO: How far are you from the World Trade Center, how many blocks, about? Three or four blocks?
63FDNY 911 Calls Transcript - EMS - Part 1 9-11-01
CALLER:
CRO: You're welcome. Thank you.
OPERATOR: Bye.
CRO: Bye.
RECORDER: The preceding portion of tape concludes at 0913 hours, 36 seconds.
This tape will continue on side B.
OPERATOR NEWELL: blah blah.
GUY IN DESK: I speak words!'''
import re
from pprint import pprint
pprint(re.findall(r'^([^:\n]+):\s*(.*?)(?=^[^:\n]+?:|\Z)', s, flags=re.MULTILINE | re.DOTALL), width=200)

这输出:

[('CRO', 'How far are you from the World Trade Center, how many blocks, about? Three or four blocks?\n63FDNY 911 Calls Transcript - EMS - Part 1 9-11-01\n'),
 ('CALLER', ''),
 ('CRO', "You're welcome. Thank you.\n"),
 ('OPERATOR', 'Bye.\n'),
 ('CRO', 'Bye.\n'),
 ('RECORDER', 'The preceding portion of tape concludes at 0913 hours, 36 seconds.\nThis tape will continue on side B.\n'),
 ('OPERATOR NEWELL', 'blah blah.\n'),
 ('GUY IN DESK', 'I speak words!')]

推荐阅读