Bash 使用awk进行条件查找/替换
我想解决一个常见但非常具体的问题:由于OCR错误,许多字幕文件包含字符“I”(大写I)而不是“l”(小写l) 我的攻击计划是:Bash 使用awk进行条件查找/替换,bash,sed,awk,hunspell,spell-checking,Bash,Sed,Awk,Hunspell,Spell Checking,我想解决一个常见但非常具体的问题:由于OCR错误,许多字幕文件包含字符“I”(大写I)而不是“l”(小写l) 我的攻击计划是: 逐字处理文件 将每个单词传递给拼写检查器(“回显单词| hunspell-l”如果有效则完全不产生响应,如果不正确则产生响应) 如果它是一个不好的单词,并且其中包含大写字母,则将其替换为小写字母l,然后重试。如果它现在是有效单词,请替换原始单词 我当然可以在脚本中标记和重建整个文件,但在我走这条路之前,我想知道是否可以在字级别使用awk和/或sed进行这些条件操作 任何
您不需要比bash更多的东西:
while read line; do
words=( $line )
for ((i=0; i<${#words[@]}; i++)); do
word=${words[$i]}
if [[ $(hunspell -l <<< $word) ]]; then
# hunspell had some output
tmp=${word//I/l}
if [[ $tmp != $word ]] && [[ -z $(hunspell -l <<< $tmp) ]]; then
# no output for new word, therefore it's a dictionary word
words[$i]=$tmp
fi
fi
done
# print the new line
echo "${words[@]}"
done < filename > filename.new
读行时;做
单词=($line)
对于((i=0;i您不需要比bash更多的东西来实现这一点:
while read line; do
words=( $line )
for ((i=0; i<${#words[@]}; i++)); do
word=${words[$i]}
if [[ $(hunspell -l <<< $word) ]]; then
# hunspell had some output
tmp=${word//I/l}
if [[ $tmp != $word ]] && [[ -z $(hunspell -l <<< $tmp) ]]; then
# no output for new word, therefore it's a dictionary word
words[$i]=$tmp
fi
fi
done
# print the new line
echo "${words[@]}"
done < filename > filename.new
读取行时;执行以下操作
单词=($line)
对于((i=0;iHi@glenn!+1!哈,哈!我不知道hunspell处理的标点符号,我将删除我的帖子:)这就是我在bash中所做的,尽管我在做第一个hunspell测试之前先检查了“i”的存在。然后又做了两个hunspell通过:第二个是所有“i”s替换为l,第三个替换为除第一个“I”之外的所有“I”替换为l(用于“傻瓜”之类的词)。这产生了一个足以满足我需求的解决方案,尽管它在处理器方面非常密集-一个120KB的文件在i7-920上处理大约需要2分钟。如果没有更有效的解决方案,我当然会接受。更有效的解决方案是类似hunspell-options file |解析输出>新建|ile
--只需生成hunspell一次,而不是为文件中的每个单词生成一次。嗨@glenn!+1!哈,哈!我不知道hunspell处理标点符号,我将删除我的帖子:)这几乎就是我在bash中完成的操作,尽管我检查了是否存在“I”第一次是在做第一次拼写测试之前。然后又做了两次拼写测试:第二次是用l代替所有的“I”,第三次是用l代替所有的“I”(除了第一个“I”)(用于像“白痴”这样的词)。这产生了一个足以满足我需求的解决方案,尽管它在处理器方面非常密集-一个120KB的文件在i7-920上处理大约需要2分钟。如果没有更有效的解决方案,我当然会接受。更有效的解决方案是类似hunspell-options file |解析输出>新建|ile
--只需生成一次hunspell,而不是文件中的每个单词都生成一次hunspell。感谢您提供的提示。关于(1)您肯定是对的,但不幸的是,我只能使用生成的.SRT文件。通过将hunspell仅用于包含“I”的单词,我使(2)稍微好了一些,但你是对的,它的计算成本仍然很高。我将调查是否可以将整个文件的输出与原始文件进行协调。感谢你提供的提示。关于(1)你肯定是对的,但不幸的是,我只需要处理生成的.SRT文件。我制作了(2)通过限制hunspell仅用于包含“I”的单词,效果会稍微好一些,但您是对的,它仍然需要大量的计算。我将研究是否可以将整个文件的hunspell输出与原始文件进行协调。