Domanda

Sto cercando di trovare parole (in particolare oggetti fisici) relative a una singola parola. Ad esempio:

Tennis : racchetta da tennis, palla da tennis, scarpa da tennis

Biliardo : stecca da biliardo, palla da biliardo, gesso

Scacchi : scacchiera, pezzo degli scacchi

Libreria : libro

Ho provato ad usare WordNet, in particolare la relazione semantica meronima; tuttavia, questo metodo non è coerente come mostrano i risultati seguenti:

Tennis : servire, pallavolo, errore ai piedi, set point, ritorno, vantaggio

Biliardo : nulla

Scacchi : mossa di scacchi, scacchiera (le cui relazioni meronime mostrano & # 8216; quadrato & # 8217; & amp; 'diagonale')

Libreria : accantona

Alla fine sarà richiesta la ponderazione dei termini, ma questo non è davvero un problema adesso.

Qualcuno ha qualche suggerimento su come farlo?


Solo un aggiornamento: ho finito per usare una combinazione delle risposte di Jeff e StompChicken.

La qualità delle informazioni recuperate da Wikipedia è eccellente, in particolare come (non sorprende) ci siano così tante informazioni rilevanti (rispetto ad alcuni corpora in cui non esistono termini come "blog" e "ipod").

La gamma di risultati da Wikipedia è la parte migliore. Il software è in grado di abbinare termini come (liste tagliate per brevità):

  • golf: [palla, ferro, tee, borsa, club]
  • fotografia: [macchina fotografica, film, fotografia, arte, immagine]
  • pesca: [pesce, rete, amo, trappola, esca, esca, canna]

Il problema più grande è classificare alcune parole come artefatti fisici; WordNet predefinito non è una risorsa affidabile in quanto non esistono molti termini (come "ipod" e persino "trampolino").

È stato utile?

Soluzione

Penso che quello che stai chiedendo sia una fonte di relazioni semantiche tra concetti. Per questo, posso pensare a una serie di modi per andare:

  1. Algoritmi di somiglianza semantica . Questi algoritmi di solito eseguono una camminata dell'albero sulle relazioni in Wordnet per ottenere un punteggio di valore reale di quanto siano correlati due termini. Questi saranno limitati dal modo in cui WordNet modella i concetti che ti interessano. WordNet :: La somiglianza (scritta in Perl) è piuttosto buona.
  2. Prova a utilizzare OpenCyc come base di conoscenza . OpenCyc è una versione open source di Cyc, una base di conoscenza molto ampia di fatti "reali". Dovrebbe avere un set molto più ricco di realizzazioni sematiche rispetto a WordNet. Tuttavia, non ho mai usato OpenCyc, quindi non posso parlare di quanto sia completo o di quanto sia facile da usare.
  3. analisi della frequenza n-grammo . Come menzionato da Jeff Moser. Un approccio basato sui dati che può "scoprire" relazioni da grandi quantità di dati, ma spesso può produrre risultati rumorosi.
  4. Analisi semantica latente . Un approccio basato sui dati simile all'analisi della frequenza n-gram che trova gruppi di parole semanticamente correlate.

[...]

A giudicare da ciò che dici di voler fare, penso che le ultime due opzioni abbiano maggiori probabilità di avere successo. Se le relazioni non sono in Wordnet, la somiglianza semantica non funzionerà e OpenCyc non sembra sapere molto su snooker diverso dal fatto che esiste.

Penso che una combinazione di n-grammi e LSA (o qualcosa del genere) sarebbe una buona idea. Le frequenze N-grammi troveranno concetti strettamente legati al concetto target (ad es. Palla da tennis) e LSA troverà concetti correlati menzionati nella stessa frase / documento (ad es. Rete, servire). Inoltre, se sei interessato solo a nomi, filtrando il tuo output per contenere solo nomi o frasi di nomi (usando un parte del discorso tagger ) potrebbe migliorare i risultati.

Altri suggerimenti

Nel primo caso, probabilmente stai cercando n-grammi dove n = 2. Puoi ottenerli da luoghi come Google o crearne uno tuo da tutta Wikipedia .

Per ulteriori informazioni, consulta questo stack correlato Domanda di overflow .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top