Skip to content

Instantly share code, notes, and snippets.

View ismaelc's full-sized avatar

Chris Ismael ismaelc

View GitHub Profile
function trainModel(data) {
classifier = new Classifier({
nGramMin: 1,
nGramMax: 3,
});
for (let key in data) {
classifier.train(data[key], key);
}
}
let range = resolveRange(selectedRange.address, usedRange.address)
range = book.worksheets
.getActiveWorksheet()
.getRange(range);
range.load("values");
await context.sync();
processedData = processData(range.values);
let book = context.workbook
let selectedRange = book.getSelectedRange()
let usedRange = book.worksheets
.getActiveWorksheet()
.getUsedRange();
selectedRange.load("address");
usedRange.load("address");
await context.sync();
export async function captureRange() {
try {
await Excel.run(async context => {
let book = context.workbook
let selectedRange = book.getSelectedRange()
let usedRange = book.worksheets
.getActiveWorksheet()
.getUsedRange();
selectedRange.load("address");
usedRange.load("address");
import Classifier from 'ml-classify-text'
let processedData = []
let classifier = {}
//document.getElementById("run").onclick = run;
document.getElementById("capture").onclick = captureRange;
document.getElementById("predict").onclick = predictRange;
<body class="ms-font-m ms-welcome ms-Fabric">
<section id="sideload-msg" class="ms-welcome__main">
<h2 class="ms-font-xl">Please sideload your add-in to see app body.</h2>
</section>
<main id="app-body" class="ms-welcome__main" style="display: none;">
<div role="button" id="capture" class="ms-welcome__action ms-Button ms-Button--hero ms-font-xl">
<span class="ms-Button-label">Capture training data</span>
</div>
<div role="button" id="predict" class="ms-welcome__action ms-Button ms-Button--hero ms-font-xl">
<span class="ms-Button-label">Predict</span>
@ismaelc
ismaelc / sentiment.js
Last active February 5, 2021 19:33
ml-classify-text-js-sample
let positive = [
'This is great, so cool!',
'Wow, I love it!',
'It really is amazing',
]
let negative = [
'This is really bad',
'I hate it with a passion',
'Just terrible!',
// Formats data into key:array
function processData(arrayData) {
let processed = {};
for (let [i, [text, label]] of arrayData.entries()) {
// TODO: Deal with headers
if (i == 0 && this.excludeFirstRow) continue;
// Do not add empty rows
if (text.trim() == '' || label.trim() == '') continue;
// Deal with column vs range select
function resolveRange(sheet) {
let range = sheet.getActiveRange().getA1Notation();
let [first, second] = range.split(':')
if (!/\d/.test(second)) {
range = `${first}1:${second}${sheet.getLastRow()}`
}
return range
}