gpt4 book ai didi

ruby - 执行许多不同 gsub 操作的最快方法?

转载 作者:数据小太阳 更新时间:2023-10-29 08:15:13 25 4
gpt4 key购买 nike

我正在将数以万计的文档从一种标记格式(显然是 RUNOFF 的一些后代,我的文档很少)转换成我可以提供给 LaTeX 的格式。此过程的一部分涉及在每个文档中搜索在旧标记格式中具有特殊含义的每个字符串,并将其替换为适合 LaTeX 的字符串。有数百个。到目前为止,我的两个想法是将每个作为一个单独的 gsub 来做,或者用一个正则表达式来制作一个 gsub,该正则表达式将匹配(通过 ORing)许多符号,然后将匹配传递给带有将传递的大 case 语句的方法返回适当的替换。从表面上看,第二种方法减少了必须扫描每个文档的次数,但正则表达式中 OR 的开销可能更昂贵。有没有人知道哪种方法更好,或者我是否错过了一个好的方法?

以下是我所描述的两种方式的示例。它们可能不完美。只是想表达我的观点。

方法一:

output.gsub!(/a<-"/, '\\"{a}') # ä
output.gsub!(/a<-^/, '\\^{a}') # â
output.gsub!(/a<-~/, '\\~{a}') # ã
...etc

方法二:

output.gsub!(/a<-"|a<-^|a<-~|etc/) {|match| convert_symbol(match)}

def convert_symbol(input)
case match
when 'a<-"'
'\\"{a}' # ä
when "a<-^"
'\\^{a}' # â
when "a<-~"
'\\~{a}' # ã
when 'etc'
'\\LaTeX...etc'
end
end

最佳答案

哇,这么多文件。但我认为如果我这样做,我就不会担心程序的效率如何。电脑又快又便宜,不介意整夜运行。

实际上,我不认为在一般情况下我会打开代码(连接到程序中)正则表达式。我想我会将替换放入一个平面文件或 YAML 文件中,并且只将那些需要状态的表达式或功能构建到程序中。

因此,如果我需要记住一个标记,我可能会在其中构建表达式,或者可能会在充满转码表达式的 YAML 文件中标记它……我最担心的是我的程序的结构有多好。我会尽量减少摆弄它和运行测试的时间,并且至少在开始时不会担心它的运行速度。

特别是,这个程序一旦完成,每个文档只运行一次。所以它并不是仔细优化速度的好选择。此外,由于它运行一次并且您必须永远接受它的决定,我认为您的重点应该放在保真度而不是速度上。

关于ruby - 执行许多不同 gsub 操作的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com