Skip to content

Commit 0d68e8c

Browse files
committed
feat: closes #2 accept string as category
1 parent 2de8a96 commit 0d68e8c

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

src/classifier.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,24 @@ export class Classifier {
2222
this.options = options
2323
}
2424

25-
learn(sentence: string, classifications: string[]) {
25+
learn(sentence: string, inputs: string | string[]) {
26+
const classifications = Array.isArray(inputs)
27+
? inputs
28+
: [inputs]
29+
2630
classifications.forEach((classification) => {
2731
let categorie = this.categories.find(
2832
(categorie) => categorie.name === classification
2933
)
30-
const relatedCategories = classifications.filter(item => item !== classification)
34+
const relatedCategories = classifications.filter(
35+
(item) => item !== classification
36+
)
3137
if (categorie) categorie.addSentence(sentence, relatedCategories)
3238
else {
33-
categorie = new Category(classification).addSentence(sentence, relatedCategories)
39+
categorie = new Category(classification).addSentence(
40+
sentence,
41+
relatedCategories
42+
)
3443
this.categories.push(categorie)
3544
}
3645
})
@@ -65,7 +74,9 @@ export class Classifier {
6574
Object.values(classification).reduce(sumFunc, 0) + unknownScore
6675
result.unknown = this.options?.percentualReturn
6776
? toPercent(!!relevancySum ? unknownScore / relevancySum : unknownScore)
68-
: !!relevancySum ? unknownScore / relevancySum : unknownScore
77+
: !!relevancySum
78+
? unknownScore / relevancySum
79+
: unknownScore
6980

7081
for (const [name, relevancy] of Object.entries(classification)) {
7182
const value = relevancySum ? relevancy / relevancySum : 0

tests/classifier.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,23 @@ describe('Classifier', () => {
108108
})
109109
)
110110
})
111+
112+
it('should be able to accept string as category to classify sentences', () => {
113+
classifier.resetKnowledge()
114+
classifier.learn('I like cats', 'animal')
115+
classifier.learn('Cats are cool', 'animal')
116+
classifier.learn('Dogs are noisy', 'animal')
117+
classifier.learn('I love animals', 'animal')
118+
classifier.learn('I like my horse', 'animal')
119+
classifier.learn('Chocolate is good', 'food')
120+
classifier.learn('I eat apple', 'food')
121+
classifier.learn('Juice is very good', 'food')
122+
classifier.learn('Brazilians eat rice and beans', 'food')
123+
classifier.learn('Bananas are good for health', 'food')
124+
125+
expect(classifier.classify('Apple juice is awesome')).toEqual(
126+
expect.objectContaining({ unknown: 0.2, animal: 0, food: 0.8 })
127+
)
128+
})
111129
})
112130
})

0 commit comments

Comments
 (0)