繁体   English   中英

从单词列表和句子列表创建平行语料库 (Python)

[英]Creating a parallel corpus from list of words and list of sentences (Python)

我正在尝试为监督机器学习创建一个并行语料库。

基本上我想要有两个文件,一个每行一个完整的句子,另一个只有特定的手动提取的术语,这些术语对应于同一行上的句子。

我已经创建了每行一个句子的文件; 现在我想用每行中的术语生成标签文件。 为了说明,这是我想出的代码:

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']

不幸的是,对于我正在处理的语料库,代码不能很好地工作。 事实上,我面临着 3 种不同的异常。

  1. 对于一个语料库,re.findall 函数总是为每个术语输出和附加 ''。

[('criminal', ''), ('liability', ''), ('legal', ''), ('fiscal', ''), ('criminal', ''), ('law', '')]

由于此线程中的最后一条评论,我解决了这个问题: 在 Python 中使用 findall 和括号

[x if x!='' else y for x,y in re.findall(r"(?=\\b("+'|'.join(list_of_terms)+r")\\b)]

  1. 但是,此方法会引发 ValueError,因为正则表达式不会为我正在使用的其他两个语料库创建 ''。 对于那些我只是使用 try except - 阻止并以令人满意的结果运行示例代码。 但是为什么在这种情况下正则表达式不创建 '' ?

  2. 最后,另一个语料库提出了一个 re.error “re.error: nothing to repeat at position 4950”,我还没有找到解决这个问题的方法。 我怀疑“list_of_terms”中有特殊字符; 有什么办法可以事先过滤掉那些?

不用说,我对编码仍然很陌生,因为我的背景是翻译而不是计算机科学。 所以一个优雅的回答将不胜感激! :)

PS:我用的语料库都在ACTER Corpus-Collection: https : //github.com/AylaRT/ACTER

您需要重新re.escape list_of_terms列表中的每个项目,并使用明确的词边界:

re.findall(r"(?=(?<!\w)("+'|'.join(map(re.escape, list_of_terms))+r")(?!\w))", line)

(?<!\\w)负向后视匹配之前没有紧跟字符字符(数字、字母或_ )的位置。

(?!\\w)负前瞻匹配不紧跟字符字符的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM