以下是這個場景: 我有一系列不同語言的文件,我需要弄清楚哪些文件是英文的。 我的想法是創建一個單詞數組,然後逐個檢查這些單詞的出現次數。最後,我將每個單詞的出現次數加在一起。如果總數足夠高,我會假定文件是英文的。PowerShell:使用單詞列表檢查文件是否爲英文
有點創意谷歌搜索的我開始了這之後:
[System.Array]$Words = ' the ',' this ',' in ',' you ',' of ',' are ','music'
[System.String]$Content = Get-Content -Path <FileName>
ForEach ($Word in $Words) {
$Count = [RegEx]::Matches($Content,[RegEx]::Escape($Word)).Count
Write-Output -InputObject "$Word : $Count"
}
這讓我發現,它的工作至少:
the : 172
this : 14
in : 52
you : 95
of : 61
are : 18
music : 0
所以我去下一個在哪裏?
我考慮用[System.Int32]$Hits = 0
和$Hits++
將它們加在一起。試圖弄清楚如何。
此外,當我用Notepad ++檢查同一個文件時,我得到了不同的計數,奇怪的是。難道我做錯了什麼?
最終你將不得不作出精確地確定你的意思是什麼「如果總的是硬判決足夠高」。總結英語單詞的總數是微不足道的,門檻是最難的部分(你可能會考慮爲普通英語單詞的總比例*設置一個閾值而不是絕對限制,同時考慮到「音樂音樂」 )。 –
順便說一句。你可以下載拼字遊戲字典,sowpods或類似的東西,然後接近100%的單詞應該被檢測到,並且約80%的邊界應該會給出好的結果。你只需要遍歷文本一次,並檢查每個單詞是否是英語。 – maraca
我必須找到英語出現頻率高且其他語言出現頻率低的詞(我在數組中包含單詞前後空格的原因之一是爲了避免包含這些字符的詞)和這樣做會產生很大的差異,從而更容易設置閾值。這些字是哪一個是另一個論壇的問題。用一本大字典,我會面臨過多重疊的風險(例如英語有法國傳統)。 @maraca,你能再詳細一點嗎? RegEx對我來說仍然是一個難題。 – Mark