[PYTHON] Créer un serveur textlint simple

textlint/textlint: The pluggable natural language linter for text and markdown.

Je vais essayer de me renseigner auprès de l'API.

organisation des fichiers

Notez qu'une erreur se produira si le dossier de l'application est le même que le nom du package à installer ultérieurement, tel que textlint.

app/
  ├ .textlintrc //Réglage
  ├ app.js      //web principal
  └ a.py        //client

Installation du package

Il convient que «--save» soit bon

$ npm init --yes
$ npm install --save-dev express
$ npm install --save-dev textlint
//Règles pour vérifier TODO
$ npm install --save-dev textlint-rule-no-todo
//Règles de vérification des kanji consécutifs
$ npm install --save-dev textlint-rule-max-kanji-continuous-len

La version actuelle est la suivante.

$ node --version
v10.21.0
$ npm --version
6.14.4
$ rpm list
[email protected]
[email protected]
[email protected]
[email protected]

Fichier

app.js


const TextLintEngine = require('textlint').TextLintEngine;
const express = require('express');
const bodyParser = require('body-parser');
const app = express();

//Magie qui analyse JSON des données post
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

//Attendez au port 8080
app.listen(8080, () => {
    console.log('Running at Port 8080...');
});

app.post('/api/textlint', (req, res, next) => {
    const req_text = req.body.text;
    const engine = new TextLintEngine();
    engine.executeOnText(req_text).then(results => {
        res.json({
            messages: results[0].messages
        });
    });
});

//Erreur 404 pour les autres demandes
app.use((req, res) => {
    res.sendStatus(404);
});

Reportez-vous à github de chaque règle pour savoir comment écrire

.textlintrc


{
  "filters": {},
  "rules": {
    "no-todo": true,
    "max-kanji-continuous-len": true,
  }
}

Appliquer une charpie à la chaîne de la variable de texte

a.py


import json
import urllib.request

url = 'http://localhost:8080/api/textlint'
text = '''
TODO: this is TODO
1 2 3 4 5 6
'''.strip()

data = {"text": text}
headers = {
    'Content-Type': 'application/json',
}
req = urllib.request.Request(url, json.dumps(data).encode(), headers)
try:
    with urllib.request.urlopen(req) as res:
        body = json.load(res)
        json_str = json.dumps(body)
        print(json_str)
except:
    print("fail")

Démarrez le serveur

$ node app.js
Running at Port 8080...

Essayez de demander

$ python3 a.py | jq .
{
  "messages": [
    {
      "type": "lint",
      "ruleId": "no-todo",
      "message": "Found TODO: 'TODO: this is TODO'",
      "index": 0,
      "line": 1,
      "column": 1,
      "severity": 2
    },
    {
      "type": "lint",
      "ruleId": "max-kanji-continuous-len",
      "message": "6 kanji ou plus d'affilée:1 2 3 4 5 6",
      "index": 19,
      "line": 2,
      "column": 1,
      "severity": 2
    }
  ]
}

Bien sûr, vous pouvez également appeler depuis la ligne de commande

$ curl -X POST -H "Content-Type: application/json" \
  -d '{"text":"TODO: this is TODO\n 1 2 3 4 5 6"}'  \
  localhost:8080/api/textlint | jq .
{
  "messages": [
    {
      "type": "lint",
      "ruleId": "no-todo",
      "message": "Found TODO: 'TODO: this is TODO'",
      "index": 0,
      "line": 1,
      "column": 1,
      "severity": 2
    },
    {
      "type": "lint",
      "ruleId": "max-kanji-continuous-len",
      "message": "6 kanji ou plus d'affilée:1 2 3 4 5 6",
      "index": 19,
      "line": 2,
      "column": 1,
      "severity": 2
    }
  ]
}

Informations de référence

Création d'un serveur local avec Node \ .js et Express \ (1 ) ―Introduction de Node \ .js et npm― \ -Qiita Exécutez textlint à partir du code \ -Qiita Exécutez textlint dans l'environnement nodejs / express [le résultat de l'exécution du nœud \ .js \ -Textlint est vide \ -Stack overflow](https://ja.stackoverflow.com/questions/60015/textlint-%E3%81%AE%E5%AE%9F % E8% A1% 8C% E7% B5% 90% E6% 9E% 9C% E3% 81% 8C% E7% A9% BA% E3% 81% AB% E3% 81% AA% E3% 82% 8B / 70543 ) Renseignez-vous sur l'API Web après avoir obtenu les données POST avec Node \ .js \ + Express \ -Qiita Comprendre le corps \ -parser du nœud \ .js \ (express ) \ -Qiita

Recommended Posts

Créer un serveur textlint simple
Comment créer un simple script serveur / client TCP
Créer un serveur de socket de domaine Unix
Ecrire un serveur TCP super simple
Créer une application GUI simple en Python
Construisez un serveur WebDAV simple sur Linux
Créez une application Web simple avec Flask
Configurer un serveur HTTPS simple avec Python 3
Configurer un serveur HTTPS simple avec asyncio
Démarrez un serveur Web Python simple avec Docker
Créer un modèle d'investissement dynamique simple en Python
Configurer un serveur SMTP simple en Python
Créer un serveur "Hello World" (HTTP) dans Tornado
Créer un module Python
Créer un LV amorçable
Créer un environnement Python
Créer un bot slack
Configurer un serveur local simple sur votre Mac
Créer un pseudo serveur d'API REST à l'aide de pages GitHub
Créez un serveur de musique domestique avec Centos8 + Universal Media Server
Créer un serveur Web en langage Go (net / http) (1)
Créez un faux serveur Minecraft en Python avec Quarry
[Vagrant] Configurer un serveur API simple avec python
Créer un plugin Wox (Python)
Créer un référentiel pypi local
Créer une fonction en Python
Créer un dictionnaire en Python
Un simple exemple de pivot_table.
Les débutants de Django créent des applications simples 3
Les débutants de Django créent des applications simples 1
Lancez un serveur WEB simple qui peut vérifier l'en-tête
Créer une page d'accueil avec django
Comment spécifier un serveur HTTP simple Python de répertoire public
[Python Kivy] Comment créer une simple fenêtre pop-up
Créer un tableau numpy python
Créer un fichier de données factice
Les débutants de Django créent des applications simples 2
Créez un outil d'analyse vidéo simple avec python wxpython + openCV
Créer un écran de connexion Django
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
Créer une salle de classe sur Jupyterhub
Serveur HTTP simple pour python
Créer un répertoire avec python
Créez une application CRUD simple en utilisant la vue de classe générique de Django
Les débutants de Django créent des applications simples 5
Créer un packer ELF rudimentaire
J'ai essayé de créer un environnement serveur qui fonctionne sous Windows 10
[Langage C] [Linux] Essayez de créer une simple commande Linux * Ajoutez simplement! !!
Présentation de la création d'un socket serveur et de la création d'un socket client
J'ai essayé de créer un pointage de crédit simple avec régression logistique.
Les utilisateurs de Rails essaient de créer un moteur de blog simple avec Django
Créez un lot planifié simple à l'aide de l'image Python de Docker et de parse-crontab
Apprenez Zundokokiyoshi en utilisant un simple RNN
Créer une interface graphique python à l'aide de tkinter
Créer un conteneur DI avec Python
Mise en place d'un filtre à particules simple
Créer un serveur Flask avec Docker