November 17, 2023
Stemming
const natural = require('natural'); const fs = require('fs'); // Загрузка стеммеров для разных языков const stemmers = { ru: natural.PorterStemmerRu, en: natural.PorterStemmer, fr: natural.PorterStemmerFr }; // Чтение содержимого текстового файла const filePath = 'file.txt'; const textContent = fs.readFileSync(filePath, 'utf-8'); // Токенизация текста на слова const tokenizer = new natural.WordTokenizer(); const words = tokenizer.tokenize(textContent); // Стемминг каждого слова для каждого языка const stemmedWords = words.map(word => { return Object.keys(stemmers).reduce((result, lang) => { result[lang] = lang === 'ru' ? stemmers[lang].stem(word) : stemmers[lang].stem(word.toLowerCase()); return result; }, {}); }); // Сохранение стеммированных слов в новый файл const outputFilePath = 'lang_out.txt'; fs.writeFileSync(outputFilePath, JSON.stringify(stemmedWords, null, 2), 'utf-8'); console.log('Стемминг завершен. Стеммированные слова сохранены в', outputFilePath);
Вместо использования JSON.stringify
для сериализации массива stemmedWords
в JSON формат, вы можете использовать другой подход, например, записывать стеммированные слова прямо в текстовый файл, разделяя их с помощью определенного разделителя, такого как пробел или перевод строки.
Ниже представлен пример, как вы можете изменить код для сохранения стеммированных слов в текстовый файл, используя перевод строки в качестве разделителя:
const natural = require('natural'); const fs = require('fs'); // Загрузка стеммеров для разных языков const stemmers = { ru: new natural.PorterStemmerRu(), en: new natural.PorterStemmer(), fr: new natural.PorterStemmerFr() }; // Чтение содержимого текстового файла const filePath = 'путь/к/вашему/текстовому/файлу.txt'; const textContent = fs.readFileSync(filePath, 'utf-8'); // Токенизация текста на слова const tokenizer = new natural.WordTokenizer(); const words = tokenizer.tokenize(textContent); // Стемминг каждого слова для каждого языка const outputFilePath = 'путь/к/вашему/выходному/файлу.txt'; const stream = fs.createWriteStream(outputFilePath, { flags: 'a' }); // Создание потока для записи в файл words.forEach(word => { const stemmedWords = Object.keys(stemmers).map(lang => { return lang === 'ru' ? stemmers[lang].stem(word.toLowerCase()) : stemmers[lang].stem(word.toLowerCase()); }).join('\n'); // Разделение стеммированных слов переводом строки stream.write(stemmedWords + '\n'); // Запись стеммированных слов в файл с переводом строки }); stream.end(); // Завершение записи в файл console.log('Стемминг завершен. Стеммированные слова сохранены в', outputFilePath);
Этот код выполняет стемминг каждого слова из входного файла и записывает стеммированные слова в выходной файл, разделяя их переводом строки. Вместо перевода строки ('\n'
) вы можете использовать другой разделитель в зависимости от требований вашего приложения.