Created
October 4, 2020 21:36
-
-
Save lakefox/ce2e35870ba259e7161aa20aca209161 to your computer and use it in GitHub Desktop.
Free article spinner/paraphraser also available on runkit as a free api.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Usage | |
// Base URL: https://spinner-sjorekjz6lgl.runkit.sh/ | |
// Rate set as a number between 0-1 and is the rate of replaced words | |
// Text is the text to be spun | |
// | |
// Example URL: | |
// `https://spinner-sjorekjz6lgl.runkit.sh/?rate=0.5&text=${encodeURLComponent(whatever text you want)}` | |
const synonyms = require("synonyms"); | |
const WordPOS = require('wordpos'), | |
wordpos = new WordPOS(); | |
var cors = require('cors'); | |
var express = require("@runkit/runkit/express-endpoint/1.0.0"); | |
var app = express(exports); | |
app.use(cors()); | |
app.get('/', async function(request, response, next) { | |
let text = request.query.text; | |
let rate = parseFloat(request.query.rate); | |
let result = await rewrite(text, rate); | |
response.send(result); | |
}); | |
async function rewrite(text, rate) { | |
text = text.split(" "); | |
for (var i = 0; i < text.length; i++) { | |
let word = text[i].replace(/[^a-zA-Z ]/g, ""); | |
let others = synonyms(word, await POS(word)) || [word]; | |
let new_word = others[~~(Math.random()*others.length)] || word; | |
if (Math.random() > rate) { | |
new_word = word; | |
} | |
text[i] = text[i].replace(word,new_word); | |
} | |
return text.join(" "); | |
} | |
async function isNoun(word) { | |
let promise = new Promise((resolve, reject) => { | |
wordpos.isNoun(word,(r)=>{resolve(r)}); | |
}); | |
let result = await promise; | |
return result; | |
} | |
async function isVerb(word) { | |
let promise = new Promise((resolve, reject) => { | |
wordpos.isVerb(word,(r)=>{resolve(r)}); | |
}); | |
let result = await promise; | |
return result; | |
} | |
async function isAdjective(word) { | |
let promise = new Promise((resolve, reject) => { | |
wordpos.isAdjective(word,(r)=>{resolve(r)}); | |
}); | |
let result = await promise; | |
return result; | |
} | |
async function isAdverb(word) { | |
let promise = new Promise((resolve, reject) => { | |
wordpos.isAdverb(word,(r)=>{resolve(r)}); | |
}); | |
let result = await promise; | |
return result; | |
} | |
async function POS(word) { | |
if (await isAdverb(word)) { | |
return "r"; | |
} else | |
if (await isAdjective(word)) { | |
return "s"; | |
} else | |
if (await isNoun(word)) { | |
return "n"; | |
} else | |
if (await isVerb(word)) { | |
return "v"; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment