NODEJS для STEEMIT - Анализ количества наиболее встречающихся слов в постах // NODEJS for STEEMIT - Analysis of the number of most common words

in Steem-BRU (BY-RU-UA)4 years ago (edited)

image.png

Итак, в прошлом посте:

  • мы установили NodeJS
  • произвели запуск первого минимального поста.

Ссылка на прошлый пост: https://steemit.com/hive-171319/@alexmove/nodejs-how-to-work-in-steem-steemit-basics-of-work-osnovy-raboty

Пришло время сделать что-то еще. Изучать NODEJS интересно, сразу применяя на практике и делая что-то любопытное.

В этом посте:

  • рассмотрим функцию определения количества повторов слов в посте
  • рассмотрим выбор наиболее часто встречающихся слов
  • получение последних постов по нужному тегу
  • соединение всех рассмотренных функций в один скрипт с подключением нужных модулей

Этот скрипт я использовал в одном из прошлых постов. Анализировал наиболее часто употребляемые слова в последних постах.

Ссылки на посты:
https://steemit.com/steemit/@alexmove/most-common-words-in-100-posts-with-tag-steemit
https://steemit.com/hive-171319/@alexmove/analiz-100-postov-s-tegom-ukraine-na-samye-ispolzuemye-slova-samoe-ispolzuemoe-slovo-ochen

Разберем этот скрипт.
Вначале добавим все константы и подключение к модулям.


//подключение к модулю dsteem для работы с API STEEMIT
const dsteem = require('dsteem');
const client = new dsteem.Client('https://api.steemit.com');

//ключ и имя аккауна - тут надо ввести свой приватный ключ
let wifkey = 'хххххх';
//имя аккаунта
let votey = "alexmove";

//технические переменные
var author;
var permlinkR;
var body3R;



Далее функция, которая считывает данные о постах.

Я присваиваю в переменные author - имя аккаунта, а в permlinkR ссылку поста. Это нужно для работы моей отдельной функции по обнаружении наиболее встречающихся слов. Хотя можно было бы сделать иначе, и обойтись без дополнительных переменных. Но мне так удобнее было на момент написания этого скрипта. И сейчас для наглядности происходящего это также удобно.


async function main() {
    const query = {
    //указать тег, который нужно читать
        tag: 'bru',
    //количество получаемых постов
        limit: 1,
    //нужно ли получать текст поста
        truncate_body: 0,
    };

    client.database
        .getDiscussions('trending', query)
        .then(result => {
            var posts = [];
            result.forEach(post => {
                author = post.author;
                permlinkR = post.permlink;
                body = post.body;
                body = body.split(" ");
                words(body);
                 
             
            });

  
        console.log(body3R); 
       

        })
        .catch(err => {
            console.log(err);
            alert('Error occured, please reload the page');
        });
}
//catch error messages
main().catch(console.error);


И функция, которая получает последние посты в STEEMIT

client.database.call('get_content', [author, permlinkR]).then(function(discussion){})


Функция которая анализирует наиболее употрбеляемые слова:

function words(body) 
{
                
    //let words = body1.split(" ");
        var wordsCount = body.reduce(function (acc, w) {
        if(acc[w]) {
            acc[w] += 1
        } else {
            acc[w] = 1;
        }
        
        return acc;
        }, {});
     
        for (var w in wordsCount) 
        {
            console.log('Cлово "%s" встречается %d раз', w, wordsCount[w]);

            //если слово встречается больше 2 раз, и длина слова больше 4 символов

            if (wordsCount[w]>2) {
            if (w.length>4)  {
               
               //  body3R = body3R +  `| @`+author + ` | ` + `<a href="https://steemit.com/@${author}/${permlinkR}">` + permlinkR + ` </a> | Word "`+ w +`"| be found  ` + wordsCount[w]+ ' times | \n';
                bodyArr = bodyArr + ` ` + w;
                fs.writeFileSync("bdLOG.txt",body3R);

            }
            
            
            }
        }

}



Соединяем все это в один файл, называем его "analize.js", поменяешь в каталог "js" на диске С:

Вот полный текст скрипта:

const dsteem = require('dsteem');
const client = new dsteem.Client('https://api.steemit.com');

let wifkey = 'xxxxx';
let votey = "alexmove";

var author;
var permlinkR;
var body3R;

function words(body) 
{
                
    //let words = body1.split(" ");
        var wordsCount = body.reduce(function (acc, w) {
        if(acc[w]) {
            acc[w] += 1
        } else {
            acc[w] = 1;
        }
        
        return acc;
        }, {});
     
        for (var w in wordsCount) 
        {
            //console.log('Cлово "%s" встречается %d раз', w, wordsCount[w]);

            if (wordsCount[w]>2) {
            if (w.length>4)  {
               
                    body3R = body3R +  `| @`+author + ` | ` + `<a href="https://steemit.com/@${author}/${permlinkR}">` + permlinkR + ` </a> | Word "`+ w +`"| be found  ` + wordsCount[w]+ ' times | \n';

            }
            }
        }

}

async function main() {
    const query = {
        tag: 'bru',
        limit: 10,
        truncate_body: 0,
    };

    client.database
        .getDiscussions('trending', query)
        .then(result => {
            var posts = [];
            result.forEach(post => {
                author = post.author;
                permlinkR = post.permlink;
                body = post.body;
                body = body.split(" ");
                words(body);
                 
             
            });

  
        console.log(body3R); 
       

        })
        .catch(err => {
            console.log(err);
            alert('Error occured, please reload the page');
        });
}
//catch error messages
main().catch(console.error);

client.database.call('get_content', [author, permlinkR]).then(function(discussion){})

  




Соединяем все это в один файл, называем его "analize.js", поменяешь в каталог "js" на диске С:

Запускаем nodejs command promt

набираем, как мы помним из прошлого поста, cd .., cd js (пока не окажемся в нужной нам папке C:\js).

набираем node analize.js

Если выводит ошибку: "SyntaxError: Unexpected token '}'" - значит это ошибка, где-то добавили лишний символ, возможно случайно. Пожалуйста, перепроверьте.

Если выводит ошибку: "Cannot find module 'dsteem', надо запустить команду "npm i dsteem" для того, чтобы установить модуль в ваш NODEJS

В случае успешного запуска, у вас получится вот такое окошко.

image.png

First HeaderSecond Header-----
@diosarichone-day-in-my-hometown-5-or-the-wonders-of-nature-in-the-philippines-in-summer-the-pace-of-living-relaxes-to-a-steadier-rhythm Word "Oriental"be found 8 times
@tinochka2one-day-in-my-town-fontan-zhizni-v-zaporozhe Word "фонтан"be found 3 times
@tinochka2one-day-in-my-town-fontan-zhizni-v-zaporozhe Word "когда"be found 3 times
@tinochka2one-day-in-my-town-fontan-zhizni-v-zaporozhe Word "спасибо"be found 3 times

Это сделано как раз для того, чтобы можно было в посте отобразить в красивой табличке. В самом скрипте, разумеется, это можно настроить.

Мы получаем подготовленный список для таблички, где указан автор, ссылка на пост, слово и количество, которое оно найдено.

Интересный материал на тему NODEJS для STEEMIT:
https://steemit.com/utopian-io/@edicted/dsteem-tutorial-lesson-5-inspecting-block-operations

Сегодня мы сделали скрипт для STEEMIT на NODEJS, который определяет количество наиболее используемых слов.

Есть вопросы? Задавайте.
Что интересно автоматизировать?

В следующем посте о NODEJS мы двинемся дальше исследовать программирование для STEEMIT

Всем счастья!
Спасибо за внимание!

Sort:  
 4 years ago 

Я бы, наверное, попробовала разгадать алгоритмы, кто как голосует. Например, я голосую в сообществе по свежим интересным постам. Куратор может голосовать по определенным тегам. Вот понять эту закономерность было бы интересно:) Вводить название аккаунта и понимаешь его логику!)

 4 years ago 

Это прямо ИИ надо разрабатывать... Но как минимум статистику можно собирать.

Возможно придумать/найти статистические формулы, и на базе них.

Хотя тут же есть факторы, которые сложно отследить автоматом. Например качество картинки на превью, тема поста и так далее.

Но в целом идея живая, можно вывести определенное количество свойств каждого поста, составить статистику по голосованию исследуемого аккаунта. И на базе этой статистики найти способ прогнозирования, если будет закономерность.

Вау, крутая тема получается
@greatketty

Я тоже думал о чем-то подобном, только в гораздо упрощенной форме - просто писать комментарии под каждым постом, где кураторы апы ставят :)

А у тебя тут гораздо более масштабная идея. в
В случае реализации, можно прогнозировать, где будет ап китов - делать апвоуты ДО апа китов, и соответственно неплохо получать от кураторских)

 4 years ago 

Одна голова хорошо, а две лучше! Будет круто, если получится что-то:)

 4 years ago 

волшебники, как вы это делаете)

Coin Marketplace

STEEM 0.08
TRX 0.29
JST 0.035
BTC 108281.63
ETH 3800.86
USDT 1.00
SBD 0.58