تحويل اللغة الإنجليزية الحديثة المبكرة إلى تهجئة القرن العشرين باستخدام NLTK
سؤال
لدي قائمة من الأوتار التي هي كل الكلمات الإنجليزية الحديثة المبكرة التي تنتهي بـ "Th". وتشمل هذه hath ، التعيين ، الطلب ، وما إلى ذلك - جميعها مترافقون للشخص الثالث المفرد.
كجزء من مشروع أكبر بكثير (باستخدام جهاز الكمبيوتر الخاص بي لتحويل جوتنبرغ Etext of Gargantua و Pantagruel إلى شيء أكثر مثل اللغة الإنجليزية في القرن العشرين ، حتى أتمكن من قراءته بسهولة أكبر) أريد إزالة آخر اثنين أو ثلاثة أحرف من كل هذه الكلمات واستبدالها بـ "s" ، ثم استخدم وظيفة معدلة قليلاً على الكلمات التي لم تكن تحديثها ، وكلاهما مدرج أدناه.
مشكلتي الرئيسية هي أنني لا أتمكن من الحصول على كتابتي بشكل صحيح في بيثون. أجد هذا الجزء من اللغة مربكة حقًا في هذه المرحلة.
إليكم الوظيفة التي تزيل:
from __future__ import division
import nltk, re, pprint
def ethrema(word):
if word.endswith('th'):
return word[:-2] + 's'
إليكم الوظيفة التي تزيل E's Outroures:
def ethremb(word):
if word.endswith('es'):
return word[:-2] + 's'
ومن هنا كانت عبارة "Abateth" و "Accuseth" تمر عبر الإيثريما ولكن ليس من خلال ethremb (ethrema) ، في حين أن كلمة "أبهوريث" ستحتاج إلى المرور عبر كليهما.
إذا كان بإمكان أي شخص التفكير في طريقة أكثر كفاءة للقيام بذلك ، فأنا كل آذان.
إليك نتيجة محاولتي الهواة لاستخدام هذه الوظائف على قائمة رمزية من الكلمات التي تحتاج إلى تحديث:
>>> 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'
لذا ، نعم ، إنها حقًا مشكلة في الكتابة. هذه هي الوظائف الأولى التي كتبتها في Python ، وليس لدي أي فكرة عن كيفية تطبيقها على الأشياء الفعلية.
المحلول
ethrema()
ليست طريقة من النوع str
, ، عليك استخدام ما يلي:
eth1 = [ethrema(w) for w in text]
#AND
eth2 = [ethremb(w) for w in text]
تحرير (للإجابة على التعليق):
ethremb(ethrema(word))
لن تعمل حتى تقوم ببعض التغييرات الصغيرة على وظائفك:
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