fuzzy-rater
Version:
Tooling for fuzzily rating text according to some query
90 lines • 9.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const FuzzyRater_1 = require("../FuzzyRater");
const shuffle_helper_1 = require("./shuffle.helper");
/**
* Sorts the given texts according to their scores, from low to high
* @param texts The texts to be sorted
* @param scores The scores that go with the texts
* @returns The sorted texts
*/
function sortResults(texts, scores) {
const textsWithScore = texts.map((text, i) => ({ text, score: scores[i] }));
textsWithScore.sort(({ score: a }, { score: b }) => a - b);
return textsWithScore.map(({ text }) => text);
}
/**
* scores, from low to high, and returns the indices they originated from
* @param scores The scores that go with the texts
* @returns The sorted indices
*/
function getSortIndices(scores) {
const scoreWithIndices = scores.map((score, index) => ({ score, index }));
scoreWithIndices.sort(({ score: a }, { score: b }) => a - b);
return scoreWithIndices.map(({ index }) => index);
}
describe("FuzzyRater", () => {
describe("new FuzzyRater", () => {
it("Should not error", () => {
new FuzzyRater_1.FuzzyRater("something cool");
});
});
describe("getScore", () => {
it("Should correctly rate simple queries", () => {
const rater = new FuzzyRater_1.FuzzyRater("something cool");
// This order is based on the default config that the rater uses, and thus something we may need to update whenever subtle details are changed
const texts = [
"I like something cool and col stuff you know",
"I like something cool and stuff you know",
"I like something col and something stuff you know",
"I like something and cool stuff you know",
"I like something col and stuff you know",
"I like cool stuff and something else you know",
"I like cool stuff and somethng else you know",
"I like cool stuff",
"I like apples and oranges.",
];
const shuffled = shuffle_helper_1.shuffle(texts);
// Max sure the data is properly shuffled
expect(shuffled).not.toEqual(texts);
// Check that the rater rates it in the same order we specified it
const scores = shuffled.map(text => rater.getScore(text));
expect(sortResults(shuffled, scores)).toEqual(texts);
});
});
describe("getMatchData", () => {
it("Should retrieve the same score as getScore", () => {
const text = "I like something col and something stuff you know";
const rater = new FuzzyRater_1.FuzzyRater("something cool");
expect(rater.getScore(text)).toEqual(rater.getMatchData(text).score);
const text2 = `with disconsolate eyes. Her husband had been "deranged in his head" for a few years before
`;
const rater2 = new FuzzyRater_1.FuzzyRater("orange");
expect(rater2.getScore(text2)).toEqual(rater2.getMatchData(text2).score);
const text3 = "manner of peasants, grave and slow. But before the sun had set the father had submitted to";
const rater3 = new FuzzyRater_1.FuzzyRater("oranne");
expect(rater3.getScore(text3)).toEqual(rater3.getMatchData(text3).score);
});
it("Should return the correct match groups", () => {
const text = "I like something col and something stuff you know";
const rater = new FuzzyRater_1.FuzzyRater("something cool");
const groups = rater.getMatchData(text).matchGroups;
const simplifiedGroups = groups.map(group => ({
types: group.relations.map(r => r.type),
text: group.range.text,
}));
expect(simplifiedGroups).toEqual([
{ text: "I like ", types: [] },
{ text: "something", types: ["match"] },
{ text: " ", types: [] },
{ text: "c", types: ["match"] },
{ text: "", types: ["skip"] },
{ text: "ol", types: ["match"] },
{ text: " and ", types: [] },
{ text: "something", types: ["match"] },
{ text: " stuff you know", types: [] },
]);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnV6enlSYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mdXp6eVJhdGUvX3Rlc3RzL0Z1enp5UmF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4Q0FBeUM7QUFDekMscURBQXlDO0FBRXpDOzs7OztHQUtHO0FBQ0gsU0FBUyxXQUFXLENBQUMsS0FBZSxFQUFFLE1BQWdCO0lBQ2xELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxNQUFnQjtJQUNwQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENB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