从单词列表和句子列表创建平行语料库(Python)
我正在尝试创建一个用于监督机器学习的并行语料库 基本上,我希望有两个文件,一个每行有一个完整的句子,另一个只有特定的手动提取的术语,对应于同一行的句子 我已经创建了每行一句话的文件;现在,我想生成标签文件,每行中都有术语。为了便于说明,我提出了以下代码:从单词列表和句子列表创建平行语料库(Python),python,regex,nlp,re,Python,Regex,Nlp,Re,我正在尝试创建一个用于监督机器学习的并行语料库 基本上,我希望有两个文件,一个每行有一个完整的句子,另一个只有特定的手动提取的术语,对应于同一行的句子 我已经创建了每行一句话的文件;现在,我想生成标签文件,每行中都有术语。为了便于说明,我提出了以下代码: import re list_of_terms = ["cake", "cola", "water", "stop"] sentences = ["Le
import re
list_of_terms = ["cake", "cola", "water", "stop"]
sentences = ["Let's eat some cake.", "I'd like to have some cola to go with the cake.", "stop eating all this cake, you waterstopper", "I will never eat this again", "cake and cola and water"]
para = []
for line in sentences:
s = re.findall(r"(?=\b("+'|'.join(list_of_terms)+r")\b)", line)
para.append(s)
print(*para, sep = "\n")
这将产生我想要的输出:
['cake']
['cola', 'cake']
['stop', 'cake']
[]
['cake', 'cola', 'water']
不幸的是,对于我正在处理的语料库,代码并不能很好地工作。事实上,我面临着三种不同的例外
[('criminal','')('responsibility','')('legal','')('fiscal','')('criminal','')('law','')
我解决了这个问题,多亏了这个帖子中的最后一条评论:
[x如果x!=''否则y代表x,y在re.findall(r“(?=\b(“+”|“.join(术语列表)+r”)\b)]
注意:我使用的语料库都在ACTER语料库集合中:您需要
重新转义
术语列表中的每个项目,并使用明确的单词边界:
re.findall(r"(?=(?<!\w)("+'|'.join(map(re.escape, list_of_terms))+r")(?!\w))", line)
re.findall(r)(?=)试试re.findall(r)(?=)是的!这正是我要找的。谢谢你直截了当的回答。不过我真的需要理解那些正则表达式的特殊字符。如果你有时间,介意详细说明r(?=)是什么吗?