回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>对于文本处理任务,我需要应用多个regex替换(即。回复sub). 有多个带有自定义替换参数的regex模式。<strong>结果需要是原始文本、带替换的文本和元组映射,标识源文本中替换字符串的开始索引、结束索引和结果文本中的索引。</strong></p>
<p>例如。
下面是一个包含输入文本和3个修饰符元组数组的示例代码。你知道吗</p>
<pre><code>text = '''
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. On Apr. 6th, 2009 Ut enim culpa minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex 5 ea commodo consequat. Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat nulla pariatur. On June 23rd, 3004 excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt 6 mollit anim id est laborum.
'''
modifiers = [
(
r'([\w]+\.?)\s+(\d{1,2})\w{2},\s+(\d{4})',
{ 1:lambda x:month(x), 2:lambda x:num2text(x), 3:lambda x:num2text(x) }
),
(
r' (\d) ',
{ 1:lambda x:num2text(x) }
),
(
r'(culpa)',
{ 1: 'culpae' }
)
]
</code></pre>
<p>输出索引图示例:</p>
<pre><code>[((7, 11), (7, 30)), ((12, 14), (31, 35)), ((20, 22), (41, 51)), ((23, 28), (52, 57)),...]
</code></pre>
<p>已经编写了一个复杂的函数,它试图处理替换过程中发生的索引偏移的所有转角情况,但是它已经占用了太多时间。你知道吗</p>
<p>也许这个任务已经有解决方案了?你知道吗</p>
<p>这是<a href="https://repl.it/repls/ExperiencedYummyChief" rel="nofollow noreferrer">a <strong>demo</strong> of current state</a>。
单词转换扩展(标准化)函数有意简化为固定值dict映射。你知道吗</p>
<p>最终的目标是制作一个文本数据集生成器。数据集需要有两个文本部分-一个带有数字缩写和其他可展开字符串,另一个完全展开为完整的文本表示(例如3->;three,apr.->;april等),还需要偏移映射以将未展开文本的部分与展开文本中的相应部分链接起来。你知道吗</p>
<p>我的实现已经处理过的一个常见情况是,至少有两个修饰符a和B,它们必须处理像“text text a text B text a text B”这样的文本,因为第一个修饰符大量输出第二个“a”替换的输出范围变得不正确,因为B修饰符进入并在第二个修饰符之前更改输出文本“a”。你知道吗</p>
<p>还部分处理了后续修饰符替换第一个修饰符的输出替换并计算出初始源范围位置的情况。你知道吗</p>
<h2>更新</h2>
<p><a href="https://github.com/aleksas/re-map/" rel="nofollow noreferrer">Writing a python package</a>称为<a href="https://pypi.org/project/re-map/" rel="nofollow noreferrer">re-map</a>。
也可以考虑<a href="https://spacy.io/api/span#merge" rel="nofollow noreferrer">spacy</a>提到的<a href="https://stackoverflow.com/a/44623232/1433554">here</a>。你知道吗</p>