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
È 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.
http://en.wikipedia.org/wiki/English_words_with_uncommon_properties
si può fare regole che rifiutano qualsiasi cosa con questi 'proprietà non comuni' per costruire un sistema che accetta più parole reali
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:
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 '-'-.
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.
Utilizzando un analizzatore lessicale, è possibile filtrare ogni token contrassegnato come sconosciuto.
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.
- 1. Il testo UILabel non contiene le parole
- 2. Come estrarre le parole chiave utilizzate nel testo?
- 3. Python - Trovare le frequenze delle parole dell'elenco di parole nel file di testo
- 4. È possibile sottolineare le parole nel testo TextView
- 5. Perché le "Parole programma" sono due parole?
- 6. Estrarre le parole nei rettangoli dal testo
- 7. Come tagliare le parole specificate dalla stringa
- 8. Segmentare le parole e raggruppare le parole sillabate e apostrofare dal testo
- 9. Ottieni le parole contate nel file PO
- 10. CMUSphinx PocketSphinx - Riconoscere tutti (o una grande quantità) di parole
- 11. Identificazione di parole e frasi importanti nel testo
- 12. Trova le prime 4 parole e le ultime 4 parole del database dopo determinate parole chiave?
- 13. Algoritmo desiderato: trova tutte le parole di un dizionario simili alle parole in un testo libero
- 14. parole Ricerca con tutti i caratteri ripetuti
- 15. Come calcolare le parole k principali
- 16. Come posso rimuovere caratteri non di parole da un testo?
- 17. Query per contare le parole SQLite 3
- 18. Come avvolgere le parole in Emacs?
- 19. preprocessore per sostituire le parole chiave javascript
- 20. Algoritmo per trovare le parole correlate in un testo
- 21. Come invertire le parole in una stringa?
- 22. In una casella di testo, proteggere le prime parole, ma consentire l'aggiunta/modifica al testo oltre quelle parole
- 23. Python: eliminare le parole tra i due delimitatori
- 24. Come sostituire le parole fuori dagli apici
- 25. Suddividere il testo dopo una lunghezza specificata ma non rompere le parole usando i grails
- 26. Esiste un modo per cercare nel database SQL parole simili (parole non identiche)?
- 27. cambia colore dell'evidenziazione per le parole corrispondenti nel blocco note ++
- 28. Come vengono sviluppate le parole chiave?
- 29. Parole vuote/nuove parole chiave in Python
- 30. Come dividere parole utilizzando JavaScript
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
Assicurati di scrivere una documentazione decente perché questi nomi non significano molto per un lettore casuale. – shoosh