تحويل اللغة الإنجليزية الحديثة المبكرة إلى تهجئة القرن العشرين باستخدام NLTK

StackOverflow https://stackoverflow.com/questions/3591673

  •  01-10-2019
  •  | 
  •  

سؤال

لدي قائمة من الأوتار التي هي كل الكلمات الإنجليزية الحديثة المبكرة التي تنتهي بـ "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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top