Modelagem de tópicos da Alocação Latente de Dirichlet (LDA) em JavaScript para Node.js. O LDA é um algoritmo de aprendizado de máquina que extrai tópicos e suas palavras -chave relacionadas de uma coleção de documentos.
No LDA, um documento pode conter vários tópicos diferentes, cada um com seus próprios termos relacionados. O algoritmo usa um modelo probabilístico para detectar o número de tópicos especificados e extrair suas palavras -chave relacionadas. Por exemplo, um documento pode conter tópicos que podem ser classificados como relacionados à praia e relacionados ao clima. O tópico da praia pode conter palavras relacionadas, como areia, oceano e água. Da mesma forma, o tópico do clima pode conter palavras relacionadas, como sol, temperatura e nuvens.
Consulte http://en.wikipedia.org/wiki/latent_dirichlet_allocation
$ npm install lda var lda = require ( 'lda' ) ;
// Example document.
var text = 'Cats are small. Dogs are big. Cats like to chase mice. Dogs like to eat bones.' ;
// Extract sentences.
var documents = text . match ( / [^.!?]+[.!?]+ / g ) ;
// Run LDA to get terms for 2 topics (5 terms each).
var result = lda ( documents , 2 , 5 ) ;O exemplo acima produz o seguinte resultado com dois tópicos (o tópico 1 é "relacionado ao gato", o tópico 2 é "relacionado ao cão"):
Topic 1
cats (0.21%)
dogs (0.19%)
small (0.1%)
mice (0.1%)
chase (0.1%)
Topic 2
dogs (0.21%)
cats (0.19%)
big (0.11%)
eat (0.1%)
bones (0.1%)
O LDA retorna uma variedade de tópicos, cada um contendo uma matriz de termos. O resultado contém o seguinte formato:
[ [ { term: 'dogs', probability: 0.2 },
{ term: 'cats', probability: 0.2 },
{ term: 'small', probability: 0.1 },
{ term: 'mice', probability: 0.1 },
{ term: 'chase', probability: 0.1 } ],
[ { term: 'dogs', probability: 0.2 },
{ term: 'cats', probability: 0.2 },
{ term: 'bones', probability: 0.11 },
{ term: 'eat', probability: 0.1 },
{ term: 'big', probability: 0.099 } ] ]
O resultado pode ser atravessado da seguinte forma:
var result = lda ( documents , 2 , 5 ) ;
// For each topic.
for ( var i in result ) {
var row = result [ i ] ;
console . log ( 'Topic ' + ( parseInt ( i ) + 1 ) ) ;
// For each term.
for ( var j in row ) {
var term = row [ j ] ;
console . log ( term . term + ' (' + term . probability + '%)' ) ;
}
console . log ( '' ) ;
} O LDA usa palavras de parada para ignorar termos comuns no texto (por exemplo: isso, isso, é, nós). Por padrão, a lista de palavras de parada usa o inglês. Para usar idiomas adicionais, você pode especificar uma variedade de IDs de idioma, como segue:
// Use English (this is the default).
result = lda ( documents , 2 , 5 , [ 'en' ] ) ;
// Use German.
result = lda ( documents , 2 , 5 , [ 'de' ] ) ;
// Use English + German.
result = lda ( documents , 2 , 5 , [ 'en' , 'de' ] ) ;Para adicionar uma nova lista de palavras específicas do idioma, crie uma arquivo /lda/lib/stopwords_xx.js onde xx é o id para o idioma. Por exemplo, uma lista de paradas francesas pode ser nomeada "Stopwords_fr.js". O conteúdo do arquivo deve seguir o formato de uma lista de paradas existentes. O formato é, como segue:
exports . stop_words = [
'cette' ,
'que' ,
'une' ,
'il'
] ; Uma semente aleatória específica pode ser usada para calcular os mesmos termos e probabilidades durante execuções subsequentes. Você pode especificar a semente aleatória, como segue:
// Use the random seed 123.
result = lda ( documents , 2 , 5 , null , null , null , 123 ) ; Kory Becker http://www.primaryobjects.com
Com base na implementação original do JavaScript https://github.com/awaisathar/lda.js