Algoritmo per la corrispondenza di elementi di testo con contenuto simile

2

Sto lavorando su un sito web (C #, ASP.Net MVC 3) che legge alcuni feed RSS da più fonti e metto il titolo e il riepilogo del feed in una tabella di database (Sql Server).

Quello che voglio fare è: Metti in atto un algoritmo che può riguardare più feed. Ad esempio se ogni feed è una notizia, vorrei mettere in relazione tutte le notizie che dicono in diverse grammatiche inglesi "Alcuni hanno vinto alcune elezioni".

Esiste un algoritmo standard per questo tipo di logica di corrispondenza dei contenuti? In caso contrario, quale tipo di algoritmo personalizzato dovrebbe essere usato?

Se questa logica può essere scritta sul lato del database (ad esempio stored procedure) sarà meglio.

    
posta Maheep 26.02.2013 - 11:52
fonte

5 risposte

3

Come ha detto @ Cosmin-Prund, non esiste un modo preesistente o banale per farlo. Il mio suggerimento off-the-top-of-my-head sarebbe quello di utilizzare un motore di ricerca come Lucene per tokenizzare e memorizzare il titolo del feed . Utilizza un tokenizzatore di stemming , in modo che tu possa abbinare le parole anche se sono in forme diverse (come wins vs %codice%). Quindi, quando elabori un nuovo feed, puoi cercare il titolo come parole chiave e vedere cosa ottieni indietro. Dovrai giocarci un po 'per scoprire come ottimizzare i risultati per fare ciò che vuoi (prova a rilasciare i due token più comuni?), Ma dovrebbe essere nel giusto ambito di quello che stai cercando.

    
risposta data 11.03.2013 - 15:22
fonte
2

In realtà ho cercato di fare qualcosa di simile. Come buon punto di partenza, ho trovato un progetto open source chiamato mahout che implementa la maggior parte degli algoritmi di cui hai bisogno, sebbene sia lontano da un plug and play soluzione.

I tre casi d'uso a cui potresti essere interessato sono il clustering, la raccomandazione e la classificazione. Fondamentalmente, raggruppano gli elementi in argomenti correlati, ma in modi leggermente diversi.

  • Utilizza la raccomandazione quando hai un sacco di articoli di notizie e stai cercando di determinare quali sono quelli che più probabilmente ti piaceranno in base alle abitudini di lettura passate e a quelle di lettori simili a te.
  • Utilizza la classificazione quando desideri raggruppare gli articoli di notizie in argomenti e sai in anticipo quali dovrebbero essere tali soggetti. Questo è molto utile per argomenti a lungo termine, come il tempo, ad esempio.
  • Utilizza il clustering quando desideri raggruppare gli articoli di notizie in argomenti di base e non sai in anticipo quali dovrebbero essere questi argomenti. Questo è molto utile per eventi di una volta, come ad esempio la morte di Hugo Chavez.

Se stai cercando una soluzione più completa, controlla Carrot2 . Tuttavia, è in grado di gestire solo circa 1.000 documenti. Forse utile se sei interessato solo a raggruppare le notizie di un giorno di notizie da alcuni feed rss selezionati.

    
risposta data 11.03.2013 - 17:06
fonte
1

Ho utilizzato un approccio basato sulla distanza Levenshtein per trovare frasi e parole simili. Non capisce la semantica, ma è usata per trovare un numero concreto che dice "quanto sono simili queste due frasi". L'algoritmo stesso è veloce e facile e so che è implementato anche in alcuni database.

    
risposta data 11.03.2013 - 16:42
fonte
0

Sul lato Database, il motore di database Postgresql, dalla versione 8.3, ha la funzione: Corrispondenza stringa fuzzy

Esso "fornisce diverse funzioni per determinare le somiglianze e la distanza tra le stringhe."

    
risposta data 18.03.2013 - 14:06
fonte
0

Suppongo che tu possa prendere un approccio minhash basato sulla rilevazione della duplicazione poiché il testo è relativamente lungo (considerando il contenuto). C'è un buon articolo qui

    
risposta data 18.03.2015 - 17:17
fonte

Leggi altre domande sui tag