Trasformare inglese prima età moderna in 20 ° secolo l'ortografia utilizzando il NLTK
Domanda
Ho una lista di stringhe che sono tutti i primi moderni le parole inglesi che terminano con 'th'. Questi includono hath, vi stabilisce, demandeth, ecc -. Sono tutti coniugati per la terza persona singolare
Come parte di un progetto molto più grande (usando il mio computer per convertire l'etext Gutenberg di Gargantua e Pantagruel in qualcosa di più simile a 20 ° secolo inglese, in modo che sarò in grado di leggere più facilmente) Voglio rimuovere l'ultimo due o tre caratteri da tutte quelle parole e sostituirle con un 's,' quindi utilizzare una funzione leggermente modificata sulle parole che ancora non sono stati modernizzati, entrambi inclusi sotto.
Il mio problema principale è che non mi sono mai riuscito a ottenere la mia digitazione a destra in Python. Trovo che parte del linguaggio davvero confuso a questo punto.
Ecco la funzione che rimuove ° è in:
from __future__ import division
import nltk, re, pprint
def ethrema(word):
if word.endswith('th'):
return word[:-2] + 's'
Ecco la funzione che rimuove estranee e di:
def ethremb(word):
if word.endswith('es'):
return word[:-2] + 's'
quindi le parole 'abateth' e 'accuseth' passerebbe attraverso ethrema ma non attraverso ethremb (ethrema), mentre la parola 'dispetta' dovrebbe passare attraverso entrambi.
Se qualcuno può pensare a un modo più efficiente per fare questo, io sono tutto orecchi.
Ecco il risultato del mio tentativo molto dilettantesco per utilizzare queste funzioni in un elenco in formato token di parole che hanno bisogno ammodernamento:
>>> eth1 = [w.ethrema() for w in text]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'ethrema'
Quindi, sì, è davvero una questione di battitura. Queste sono le prime funzioni che io abbia mai scritto in Python, e non ho idea di come applicarli a oggetti reali.
Soluzione
ethrema()
non è un metodo di tipo str
, è necessario utilizzare il seguente:
eth1 = [ethrema(w) for w in text]
#AND
eth2 = [ethremb(w) for w in text]
EDIT (alla risposta commento):
ethremb(ethrema(word))
non avrebbe funzionato fino a quando hai fatto alcune piccole modifiche al tuo funzioni:
def ethrema(word):
if word.endswith('th'):
return word[:-2] + 's'
else
return word
def ethremb(word):
if word.endswith('es'):
return word[:-2] + 's'
else
return word
#OR
def ethrema(word):
if word.endswith('th'):
return word[:-2] + 's'
elif word.endswith('es'):
return word[:-2] + 's'
else
return word