[PYTHON] Erstellen Sie einen einfachen Textlint-Server

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

Ich werde versuchen, Anfragen mit API zu stellen.

Dateiorganisation

Beachten Sie, dass ein Fehler auftritt, wenn der App-Ordner mit dem später zu installierenden Paketnamen übereinstimmt, z. B. "textlint".

app/
  ├ .textlintrc //Aufbau
  ├ app.js      //Web-Haupt
  └ a.py        //Klient

Paketinstallation

Es ist angemessen, dass "--save" gut ist

$ npm init --yes
$ npm install --save-dev express
$ npm install --save-dev textlint
//Regeln zur Überprüfung von TODO
$ npm install --save-dev textlint-rule-no-todo
//Regeln zum Überprüfen aufeinanderfolgender Kanji
$ npm install --save-dev textlint-rule-max-kanji-continuous-len

Die aktuelle Version lautet wie folgt.

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

Datei

app.js


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

//Magie, die json von Post-Daten analysiert
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

//Warten Sie an 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
        });
    });
});

//404 Fehler für andere Anfragen
app.use((req, res) => {
    res.sendStatus(404);
});

Informationen zum Schreiben finden Sie im Github jeder Regel

.textlintrc


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

Wenden Sie Flusen auf die Zeichenfolge der Textvariablen an

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")

Starten Sie den Server

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

Versuchen Sie anzufordern

$ 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 oder mehr Kanji hintereinander:1 2 3 4 5 6",
      "index": 19,
      "line": 2,
      "column": 1,
      "severity": 2
    }
  ]
}

Natürlich können Sie auch über die Kommandozeile anrufen

$ 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 oder mehr Kanji hintereinander:1 2 3 4 5 6",
      "index": 19,
      "line": 2,
      "column": 1,
      "severity": 2
    }
  ]
}

Referenzinformationen

Erstellen eines lokalen Servers mit Node \ .js und Express \ (1 ) ―Einführung von Node \ .js und npm― \ -Qiita Textlint über Code \ -Qiita ausführen Textlint in NodeJS / Express-Umgebung ausführen [Das Ausführungsergebnis von node \ .js \ -Textlint ist leer \ -Stack-Überlauf](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 ) Fragen Sie nach der Web-API, nachdem Sie POST-Daten mit Node \ .js \ + Express \ -Qiita erhalten haben Grundlegendes zum body \ -parser des Knotens \ .js \ (express ) \ -Qiita

Recommended Posts

Erstellen Sie einen einfachen Textlint-Server
So erstellen Sie ein einfaches TCP-Server / Client-Skript
Erstellen Sie einen Unix Domain Socket-Server
Schreiben Sie einen supereinfachen TCP-Server
Erstellen Sie eine einfache GUI-App in Python
Erstellen Sie einen einfachen WebDAV-Server unter Linux
Erstellen Sie eine einfache Web-App mit Flasche
Richten Sie mit Python 3 einen einfachen HTTPS-Server ein
Richten Sie einen einfachen HTTPS-Server mit Asyncio ein
Starten Sie mit Docker einen einfachen Python-Webserver
Erstellen Sie in Python ein einfaches Momentum-Investmentmodell
Richten Sie einen einfachen SMTP-Server in Python ein
Erstellen Sie in Tornado einen HTTP-Server (Hello World)
Erstellen Sie ein Python-Modul
Erstellen Sie eine bootfähige LV
Erstellen Sie eine Python-Umgebung
Erstellen Sie einen Slack Bot
Richten Sie einen einfachen lokalen Server auf Ihrem Mac ein
Erstellen Sie mit GitHub Pages einen Pseudo-REST-API-Server
Erstellen Sie einen Home Music Server mit Centos8 + Universal Media Server
Erstellen Sie einen Webserver in der Sprache Go (net / http) (1)
Erstellen Sie mit Quarry einen gefälschten Minecraft-Server in Python
[Vagrant] Richten Sie einen einfachen API-Server mit Python ein
Erstellen Sie ein Wox-Plugin (Python)
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Ein einfaches Beispiel für pivot_table.
Django-Anfänger erstellen einfache Apps 3
Django-Anfänger erstellen einfache Apps 1
Starten Sie einen einfachen WEB-Server, der den Header überprüfen kann
Erstellen Sie eine Homepage mit Django
So geben Sie das öffentliche Verzeichnis Python Simple HTTP Server an
[Python Kivy] So erstellen Sie ein einfaches Popup-Fenster
Erstellen Sie ein Python-Numpy-Array
Erstellen Sie eine Dummy-Datendatei
Django-Anfänger erstellen einfache Apps 2
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
Erstellen Sie einen Django-Anmeldebildschirm
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Erstellen Sie ein Klassenzimmer auf Jupyterhub
Einfacher HTTP-Server für Python
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie eine einfache CRUD-App mit der generischen Klassenansicht von Django
Django-Anfänger erstellen einfache Apps 5
Erstellen Sie einen rudimentären ELF-Packer
Ich habe versucht, eine Serverumgebung zu erstellen, die unter Windows 10 ausgeführt wird
[C-Sprache] [Linux] Versuchen Sie, einen einfachen Linux-Befehl zu erstellen. * Fügen Sie einfach hinzu! !!
Übersicht über das Erstellen eines Server-Sockets und das Einrichten eines Client-Sockets
Ich habe versucht, einen einfachen Kredit-Score mit logistischer Regression zu erstellen.
Rails-Benutzer versuchen, mit Django eine einfache Blog-Engine zu erstellen
Erstellen Sie einen einfachen geplanten Stapel mit Dockers Python Image und parse-crontab
Lerne Zundokokiyoshi mit einem einfachen RNN
Erstellen Sie mit tkinter eine Python-GUI
Erstellen Sie einen DI-Container mit Python
Implementierung eines einfachen Partikelfilters
Erstellen eines Flask-Servers mit Docker