追加させていただきます。
=====================================
名前: 単語の出現回数を数えるマクロ
版: 1.0
用途: 英数字とアンダースコアで構成される単語の
出現回数を数えます。
コメント: プログラムのトークンの出現回数を数えて、
極端に出現回数が少ないものを打ち間違いと見なし、
出現回数が多いものの中に近い単語があれば
それを正解として修正する、ということを目標に、
第一歩として作ったのですが、なかなか難しいです。
acos が cos に修正されては困るのです。
その後あまり使う機会がありません。
=====================================
/* word counter */
FIND_WORD = “[_a-zA-Z][_a-zA-Z0-9]*”;
FIND_FLAG = eeFindNext | eeFindReplaceCase | eeFindReplaceOnlyWord
| eeFindReplaceRegExp | eeFindAround;
dic = new ActiveXObject(“Scripting.Dictionary”);Window.Redraw = false;
word = GetNextWord();
StorePosition();do{
RegisterWord(word);
word = GetNextWord();
}while(!IsOriginalPosition());PrintWords();
Window.Redraw = true;
dic = null;function StorePosition(){
originalBottomX = document.selection.GetBottomPointX(eePosLogical);
originalBottomY = document.selection.GetBottomPointY(eePosLogical);
}function GetNextWord(){
document.selection.WordRight();
document.selection.Find(FIND_WORD, FIND_FLAG);
document.HighlightFind = false;return document.selection.Text;
}function IsOriginalPosition(){
bottomX = document.selection.GetBottomPointX(eePosLogical);
bottomY = document.selection.GetBottomPointY(eePosLogical);if (bottomX == originalBottomX && bottomY == originalBottomY)
return true;
else
return false;
}function RegisterWord(word){
if(dic.Exists(word)){
n = dic.Item(word);
dic.Item(word) = n + 1;
} else {
dic.Add(word, 1);
}
}function PrintWords(){
editor.NewFile();
newDoc = editor.ActiveDocument;total = 0;
words = dic.Keys().toArray().sort();
//words = words.sort(SortByCount);
for(i in words) {
n = dic.Item(words);
newDoc.selection.Text = words + “, ” + n + “n”;
total += n;
}
newDoc.selection.Text = “——————–n”;
newDoc.selection.Text = “total ” + total + ” words.n”;
}function SortByCount(a, b){
i = dic.Item(a);
j = dic.Item(b);if (i > j) return -1;
else if (i b) return 1;
else if (a < b) return -1;
else return 0;
}