2010-01-03 11 views
7

Attualmente sto analizzando un sacco di e-mail e voglio ottenere parole e altri interessanti token di posta (anche con errori di ortografia o combinazioni di caratteri e lettere, come "zebra21" o "cliente242"). Ma come posso sapere che "0013lCnUieIquYjSuIA" e "anr5Brru2lLngOiEAVk1BTjN" non sono parole e non sono rilevanti? Come estrarre le parole e scartare i token che sono errori di codifica o parti della firma pgp o qualsiasi altra cosa che riceviamo nelle mail e sappiamo che non saremo mai interessati a quelli?Come riconoscere le parole nel testo con i token non parole?

risposta

3

È necessario decidere su un criterio abbastanza buono per una parola e scrivere un'espressione regolare o un manuale per applicarlo.
Alcune regole che possono essere estrapolati dai vostri esempi:

  • parole possono iniziare con una lettera captial o essere tutte le lettere maiuscole, ma se avete più di dire, 2 lettere maiuscole e più di 2 lettere minuscole all'interno di un parola, non è una parola
  • Se avete i numeri all'interno della parola, non è una parola
  • se è più dire che, 20 caratteri

non c'è trucco magico. devi decidere cosa vuoi che siano le regole e farle accadere.

Al modo alternativo è addestrare una sorta di sistema Hidden Markov-Models per riconoscere cose che suonano come parole ma penso che questo sia eccessivo per ciò che si vuole fare.

+0

grazie per il consiglio, ho iniziato così, ho calcolato NrLetterToDigitChanges e NrLowerToUpperChnages e ho creato diversi "livelli" di parole attualmente I per NrLowerToUpperChnages <= 1 e NrLetterToDigitChanges <= 1 è di primo livello e se la somma di questo due è più di 8 non è una parola, quindi definirò alcuni livelli in più e vedrò cosa funziona meglio per me, grazie – zebra

+1

Assicurati di scrivere una documentazione decente perché questi nomi non significano molto per un lettore casuale. – shoosh

1

Anche se io in genere d'accordo con la risposta di shoosh, il suo approccio rende più facile da raggiungere richiamo alto ma anche bassa precisione, cioè otterresti quasi tutte le parole vere ma anche molte non parole. Se la tua definizione di parola è troppo restrittiva, è il contrario, ma non è nemmeno quello che vuoi da quando perdi casi come "zebra123". Così qui sono alcune idee su come migliorare la precisione:

  1. Si può pensare worthwile circa se si potesse determinare quali parti di una e-mail appartengono al testo principale e quali sono piè di pagina, come le firme PGP. Sono sicuro che è possibile trovare alcune euristiche semplici che corrispondono alla maggior parte dei casi, ad es. taglio di tutto sotto una linea che consiste solo di caratteri '-'-.

  2. A seconda dei criteri di rendimento, è possibile verificare se una parola è una parola reale o contiene una parola reale confrontandola con un semplice elenco di parole. È facile trovare elenchi piuttosto esaurienti di parole inglesi sul Web e puoi anche compilarne uno estraendo le parole da un corpus di testo ampio e pulito.

  3. Utilizzando un analizzatore lessicale, è possibile filtrare ogni token contrassegnato come sconosciuto.

  4. Alcune statistiche semplici potrebbero dirvi quanto è probabile che qualcosa sia una parola. I token che si presentano ad alta frequenza molto probabilmente sono parole. I token che appaiono solo una volta o il cui numero è al di sotto di una certa soglia molto probabilmente non sono parole. Errori di ortografia comuni dovrebbero apparire più di una volta e quelli non comuni possono essere ignorati.

Alcuni se questi suggerimenti chiaramente non funzionano per casi come 'zebra123'. Ancora una volta, semplicemente tagliando, o dividendo, i numeri in parola possono fare il trucco.

Il mio approccio generale sarebbe identificare i token che sono certamente parole (usando i suggerimenti sopra), quindi identificare i token che di certo non sono parole (usando un'espressione regolare), e quindi guardare (con gli occhi) ai pochi centinaia o migliaia di token rimanenti per trovare caratteristiche comuni per gestirli separatamente.

Problemi correlati