più commonly misspelled English words sono entro due o tre errori tipografici (una combinazione di sostituzioni s, inserzioni i o delezioni lettera d ) dalla loro forma corretta. Cioè errori nella coppia di parole absence - absense
possono essere riassunti come aventi 1 s, 0 i e 0 d.Come faccio a confondere una parola con una parola intera (e solo una parola intera) in una frase?
È possibile trovare una corrispondenza sfocata per trovare le parole e i loro errori di ortografia utilizzando per sostituire il numeroregex python module.
La tabella seguente riassume i tentativi fatti per segmentare sfocata una parola di interesse da parte di qualche frase:
- Regex1 trova il miglior
word
partita insentence
permettendo al massimo 2 errori - Regex2 trova la migliore corrispondenza
word
insentence
consentendo a la maggior parte dei 2 errori durante il tentativo di operare solo su (penso) parole intere - Regex3 trova la migliore corrispondenza
word
insentence
consentendo a la maggior parte di 2 errori mentre funziona solo su (penso) parole intere. Mi sbaglio in qualche modo - Regex4 trova il miglior
word
partita insentence
permettendo al più 2 errori mentre (credo) alla ricerca per la fine della partita per essere un confine di parola
Come vorrei scrivere un'espressione regex che elimina, se possibile, corrispondenze fuzzy false positive e false negative su queste coppie di parole-frasi?
Una possibile soluzione sarebbe quella di confrontare solo parole (stringhe di caratteri circondate da spazi bianchi o l'inizio/fine di una riga) nella frase per la parola di interesse (parola principale). Se c'è una corrispondenza fuzzy (e < = 2) tra la parola principale e una parola nella frase, quindi restituire quella parola completa (e solo quella parola) dalla frase.
Codice
Copiare il seguente dataframe negli appunti:
word sentence
0 cub cadet cub cadet 42
1 plastex vinyl panels
2 spt heat and air conditioner
3 closetmaid closetmaid
4 ryobi batteries kyobi
5 ryobi 10' table saw ryobi
6 trafficmaster traffic mast5er
Ora usano
import pandas as pd, regex
df=pd.read_clipboard(sep='\s\s+')
test=df
test['(?b)(?:WORD){e<=2}']=df.apply(lambda x: regex.findall(r'(?b)(?:'+x['word']+'){e<=2}', x['sentence']),axis=1)
test['(?b)(?:\wWORD\W){e<=2}']=df.apply(lambda x: regex.findall(r'(?b)(?:\w'+x['word']+'\W){e<=2}', x['sentence']),axis=1)
test['(?V1)(?b)(?:\w&&WORD){e<=2}']=df.apply(lambda x: regex.findall(r'(?V1)(?b)(?:\w&&'+x['word']+'){e<=2}', x['sentence']),axis=1)
test['(?V1)(?b)(?:WORD&&\W){e<=2}']=df.apply(lambda x: regex.findall(r'(?V1)(?b)(?:'+x['word']+'&&\W){e<=2}', x['sentence']),axis=1)
Per caricare la tabella nel vostro ambiente.
Sono questi modificatori linea '(? V1)', '(? B)' e che cosa significano? – sln
Come si confronta una parola _fuzzy_ con una parola reale? Stai usando un dizionario di qualche tipo? Il modo più semplice è dividere gli spazi bianchi e utilizzare un albero ternario personalizzato per scrivere tutte le parole in un dizionario. Mentre attraversi l'albero, potresti consentire _N_ lettere fuori posto. Avresti bisogno di un codice di diramazione speciale. – sln
@sln: sta parlando di questo modulo: https://pypi.python.org/pypi/regex –