本脚本主要用于处理从 PDF
复制出来的断行文本。通过匹配文本中的标点符号进行分段,中英文文本均可。下载
Powershell 脚本,也可参考 Patherbar
插件中的调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
$RegexEndPunctuation = '[\\.:;!。!?:\s]$'
$RegexItemIdentify = '^•|^–\s|^-\s|^Chapter\s[1-9][0-9]{0,1}|^(\d*\.)+\d*\s|^\d*\.\s|^·|^\[\d*\]\s[A-Z]|^\d\)\s|^\d)|^[1-9]\s'
$RegexEndAbbr = ' fig\.$| et al\.$| Fig\.$| Eq\.$| eq\.$| p\.$| pp\.$| Ph\.D\.$|cf\.$|Cf\.$|,\s\d{4};$|\.\s\(\d{4}\);$'
$RegexEndEng = '[a-z0-9]$'
$TextProcess = "process" $PLAIN_TEXT = Get-Clipboard
function TextSplit ($InputText) { $InputText = $InputText -split "`n" for ($i = 0; $i -lt $InputText.Count; $i++) { $InputText[$i] = $InputText[$i].Replace("fi", "fi") $InputText[$i] = $InputText[$i].Replace("ffi", "ffi") $InputText[$i] = $InputText[$i].Replace("fl", "fl") $InputText[$i] = $InputText[$i].Replace("ff", "ff") $InputText[$i] = $InputText[$i].Trim() } $InputText = $InputText.where( { $_ -ne "" }) return $InputText }
function PunctuationSegment ($InputText){ $Separator = @() for ($i = 0; $i -lt $InputText.Count-1; $i++) { $IsEnd = $InputText[$i] -cmatch $RegexEndPunctuation $IsNextItem = $InputText[$i + 1] -cmatch $RegexItemIdentify $IsAbbr = $InputText[$i] -cmatch $RegexEndAbbr $IsEng = $InputText[$i] -cmatch $RegexEndEng if ($IsEnd -or $IsNextItem) { if ($IsAbbr) { $Separator += 1 } else { $Separator += 2 } } elseif ($IsEng) { $Separator += 1 } else { $Separator += 0 } } return $Separator }
function Textjoin ($InputText, $Separator) { if ($InputText.Count -le 1) { $CombText = $InputText } else { $CombText = $InputText[0] for ($i = 0; $i -lt $InputText.Count - 1; $i++) { $CombTextSplit = $CombText -split "`n" $IsTitle = $CombTextSplit[-1] -cmatch $RegexItemIdentify -and $InputText[$i + 1] -cmatch '^[A-Z]' if ($IsTitle) { $CombText = $CombText + "`n`n" + $InputText[$i + 1] } elseif ($Separator[$i] -eq 0) { $CombText = $CombText + $InputText[$i + 1] } elseif ($Separator[$i] -eq 1) { $CombText = $CombText + " " + $InputText[$i + 1] } elseif ($Separator[$i] -eq 2) { $CombText = $CombText + "`n`n" + $InputText[$i + 1] } } } return $CombText }
function TextModify () { $SepText = TextSplit($PLAIN_TEXT) $Separator = PunctuationSegment($SepText) $JoinText = Textjoin $SepText $Separator $JoinText | Set-Clipboard }
function TextCopy () { $PLAIN_TEXT | Set-Clipboard }
if ($TextProcess -eq "process") { TextModify } elseif ($TextProcess -eq "initial") { TextCopy }
|