2014-04-19 12 views
11

Używam bardzo fajne biblioteki natural dla node.js.Korzystanie z node.js i przetwarzania języka naturalnego do obsługi wielu wyrażeń wyrazów

Próbuję wyszkolić mój klasyfikator, aby pasował do wyrażenia user experience. Mój problem polega na tym, że jeśli zrobię coś takiego:

classifier.addDocument(['user experience'], 'ux'); 

To nie pasuje do 2 wyrażeń słownych, wierzę, ponieważ tokenizuje słowa. Jeśli robię coś takiego:

classifier.addDocument(['user', 'experience'], 'ux'); 

działa jak chcę go, ale moim problemem jest to, że nie chcą po prostu pasuje na słowie user ponieważ artykuł mógłby wymienić zawierać słowo user wielokrotnie i potencjalnie nie miałoby to nic wspólnego z doświadczeniem użytkownika, co prowadziłoby do niedokładnych klasyfikacji. Tak, moje pytanie brzmi: jak dopasować 2 lub więcej fraz słów używając NLP?

Dzięki za pomoc z góry.

+0

Czy nie jest to możliwe z NLP czy należy szukać w innym kierunku? – imns

+0

Hi @bababa, mam ten sam problem, jakie było dla ciebie ostateczne rozwiązanie? Dzięki :) – Pablo

+1

Naprawdę nie znalazłem takiego, który działał. Odpowiedź @ jedanput poniżej nie sprawdziła się u mnie. Użycie tablicy dla bigramów nie przyniosło oczekiwanego rezultatu, którego szukałem. – imns

Odpowiedz

9

Powinieneś rzucić okiem na n-gramy, szczególnie w tym przypadku nazywa się to bigram, sekwencją dwóch żetonów. https://github.com/NaturalNode/natural#bigrams

Nie użyłem tej konkretnej biblioteki (nie myśl, że nodejs jest najlepszym językiem dla NLP, to jest jeszcze na wczesnym etapie i sugeruję, abyś używał bardziej dojrzałej biblioteki (NLTK)/języka (python) dla NLP, chociaż wydaje mi się, że to jest w porządku tylko do testowania lub jakiegoś małego projektu).

Zresztą sądząc po instrukcji, może można zrobić coś takiego

classifier.addDocument([['user', 'experience']], 'ux'); 

Dodaj wsporniki dla każdej sekwencji chcesz dodać razem.

0

Może zbyt późno, ale ...

używam Natural i myślę, że nie trzeba przekazać tablicę, po prostu zrobić:

classifier.addDocument('user experience', 'ux'); 

To powinno działać. Zasadniczo po prostu usuń nawiasy.

0

Myślę, że najlepszym podejściem do tego jest traktowanie tekstu jako tablicy obiektów. Tak:

var natural = require('natural'); 
 
var classifier = //Here comes the classifier that you had to choose 
 
    
 
var trainingData = [{text: 'user experience', label: 'ux'}] 
 

 
var yourTestData = []; 
 

 
trainingData.forEach(function(item){ 
 
    // finally you add the data to classifier 
 
    classifier.addDocument(item.text, item.label); 
 
});

Powiązane problemy