Подсчёт повторений слов в файле на коленке
Примитивный скрипт на JavaScript, подсчитывающий кол-во повторений английских слов без учёта морфологии и пр. лингво-хитростей:
"use strict"; /* eslint-env es6 */
const fs = require('fs');
function calculate(source)
{
const words = source
.toLowerCase()
.replace(/[^a-z0-9'’]+/gm, ' ')
.split(/\s+/)
.filter(s => s.length)
.reduce((map, word) =>
{
if(!map.get(word))
map.set(word, 0);
map.set(word, map.get(word) + 1);
return map;
}, new Map());
return Array.from(words)
.sort((a, b) => a[1] < b[1] ? 1 : -1);
}
const [,, sourceF, destinationF ] = process.argv;
if(!fs.existsSync(sourceF))
throw new Error('Couldn\'t find "' + sourceF + '" file');
const source = fs.readFileSync(sourceF).toString();
const words = calculate(source);
console.info('Found ' + words.length + ' words.');
const str = words
.map(([word, count]) => `${word} = ${count}`)
.join('\n');
fs.writeFileSync(destinationF, str);
console.info('Count-map\'s written into "' + destinationF + '" file');
Из простых, но действенных, решений можно фильтровать все слова:
- с апострофами (Mike's, I'm, You're, Can't, Don't, You'll, etc)
- отдельно стоящие числа (или вообще все слова с числами)
Если хочется больше заморочиться, то можно сподобиться и написать морфологическую "определялку" является ли слово множественной формой какого-то из других представленных слов. Но, по сути, чем глубже закопаешься, тем очевиднее будет, что для серьёзных задач стоит взять серьёзную лингво-либу.
Комментарии
Оставить комментарий
modules/comment
window._Comment_content_article_153 = new classes.Comment( '#comment_block_content_article_153',
{
type: 'content_article',
node_id: '153',
user: 1,
user_id: 0,
admin: 0,
view_time: null,
msg: {
empty: 'Комментарий пуст',
ask_link: 'Ссылка:',
ask_img: 'Ссылка на изображение:' }
});