Ricerca di occorrenze di parole e frasi utili nelle stringhe

6

Sto costruendo un'app che analizza i post delle persone tracciando i loro tweet e post di Facebook. Devo elaborare tutti i post e trovare frasi utili . Quello che intendo per utile è che, qualsiasi parola o frase che è un sostantivo / aggettivo / verbo che rappresenterebbe un oggetto o un'idea discreta, o in altre parole, sto cercando parole chiave.

Ad esempio, se qualcuno ha pubblicato questi tre post (in un senso molto semplice):

i am a big fan of progressive metal music! it is fantastic!

Look what I've found: a new Progressive Metal band!

a good genre in music is progressive metal

Analizzando questi semplici esempi, ho bisogno di estrarre progressive metal e music con il rango di occorrenza più alto. Ma se passo le occorrenze delle parole semplicemente, otterrò a , is , I come le parole più comuni. Se riesco a superare le proposizioni, otterrò parole singole come progressive , metal , music . Quello di cui ho veramente bisogno è di ottenere frasi come progressive metal o progressive metal music , che insieme hanno effettivamente un senso. Come parola, progressive e metal hanno altri significati, ma la frase progressive metal definisce un genere musicale, che non ha nulla a che fare con le singole parole stesse. Ricerca in modo ricorrente l'occorrenza di ogni frase possibile in tutti i post (ad esempio prima ricerca i in tutti i post, quindi i am , poi i am a ecc.) È computazionalmente estremamente costosa e non è un'opzione.

Ho esaminato alcune domande simili:

Opzioni disponibili per la classificazione delle parole nel testo?

Analisi della lingua per trovare parole importanti

Ma entrambi sono overkill, risolvono (o cercano di risolvere) problemi più generali. Il mio problema è più specifico e sto pensando a una soluzione più semplice che non coinvolga la PNL. Un'idea che si potrebbe presentare è quella di confrontare i post con un elenco di parole / frasi valido, ma le persone potrebbero parlare di un nome correlato al brand o di un evento specifico, non disponibili in un dizionario, come Twitter API , o death of Michael Jackson .

Attualmente sto valutando i post contro i Mi piace di Facebook dell'utente, il che rende un buon dizionario di frasi valide sull'utente, ma fallisce quando siamo su Twitter, senza la nozione di "Mi piace", quindi nessun dizionario valido. Esiste un modo semplice per verificare l'occorrenza di termini validi in una vasta serie di frasi? (non necessariamente grammaticalmente corretto)

AGGIORNAMENTO: è un'app per iOS, quindi sono in Objective-C, da tenere a mente nei consigli di libreria.

    
posta Can Poyrazoğlu 08.01.2013 - 15:46
fonte

1 risposta

4

Una descrizione molto approssimativa di come ciò potrebbe essere fatto con Apache Solr.

Solr è un motore di ricerca full text con molte opzioni di installazione e modi molto flessibili per gestire l'indicizzazione e la sfaccettatura. Usando le giuste combinazioni di tokenizer (testo diviso in singoli elementi, per lo più parole) e filtri (post processare i token come rimuovere le parole di stop come "a", "e", "I" ecc. O convertire in minuscolo) si potrebbe ottenere ragionevole risultati. Soprattutto dal momento che puoi gestire un singolo testo in diversi modi allo stesso tempo, tagliandolo e filtrandolo in più di un campo.

Questo permetterebbe di indicizzare singole parole e gruppi di parole con o senza parole chiave. Eseguire una ricerca di faccette conterebbe le occorrenze di tali parole o gruppi.

Il lavoro principale sarebbe trovare un buon modo per creare i gruppi di parole. Al momento non sono sicuro se uno dei tokenizer o filtri predefiniti sarebbe adatto a questo. Sebbene tu possa scrivere il tuo come plugin in Java.

Credo ci siano soluzioni migliori con strumenti specializzati, ma sono abbastanza sicuro che con Solr si potrebbe fare in una certa misura.

    
risposta data 08.01.2013 - 16:02
fonte

Leggi altre domande sui tag