2017-03-18 8 views
2

私は、このような英語の単語をPythonのプログレッシブフォームに結合するにはどうしたらいいですか?

として活用を行うことができるようになるこれらのルールの例外のすべてを私は pattern.en年代 conjugate見てきましたが、それはほんの数フォームにコンジュゲート、および私はむしろ座って持っていないとプログラム
  • 無料 -
  • を食べ入浴 - -
を禁止 -
  • 禁止されて - こと
  • 入浴食べ
  • を解放

    nltkにはステミングがありますが、少なくともStackOverflowを検索すると、逆の操作はしていないようです。これは非常に基本的なNLPタスクのようですが、私はこれをPythonで行う現代的なものは何も見つかりません。英語のプログレッシブ形式には私が知っている不規則性はありませんが、一般的な結合ツールは素晴らしいものです。

    私はまた、代替機能として働くかもしれないこの規則の例外は、あるかどうかを確認しようとしています:

    def present_to_progressive(x): 
        vowels = set(['a','e','i','o','u']) 
        size = len(x) 
        if size == 2: 
         return x + 'ing' 
        elif x[size - 2:] == 'ie': 
         return x[:(size-2)] + 'ying' 
        elif x[size - 1] not in vowels and x[size - 2] not in vowels: 
         return x + 'ing' 
        elif x[size - 1] == 'e' and x[size-2] not in vowels: 
         return x[0:(size-1)] + 'ing' 
        elif x[size - 1] not in vowels and x[size-2] in vowels: 
         if x[size - 3] not in vowels: 
          return x + x[size-1] + 'ing' 
         else: 
          return x + 'ing' 
        else: 
         return x + 'ing' 
    

    編集:「すなわち」動詞

  • 答えて

    2

    のための追加されたケースがありますあなたが望むことを行うこの種の変更のためのライブラリ全体。 pattern.en

    をそれは良い情報源である:あなたがここでそれを見つけることができます

    pattern.enと呼ばれています。

    conjugate(verb, 
        tense = PRESENT,  # INFINITIVE, PRESENT, PAST, FUTURE 
        person = 3,    # 1, 2, 3 or None 
        number = SINGULAR,  # SG, PL 
        mood = INDICATIVE,  # INDICATIVE, IMPERATIVE, CONDITIONAL, SUBJUNCTIVE 
        aspect = IMPERFECTIVE, # IMPERFECTIVE, PERFECTIVE, PROGRESSIVE 
        negated = False,   # True or False 
        parse = True) 
    

    それは非常に便利な、非常に広大である: ここでは、サイト上のコンジュゲートのチュートリアルからの抜粋です!

    +0

    さて、最初にaspectパラメータを見落としたと思います。これは私の目的のためのトリックを行う必要があります。 –

    1

    あなたのコードはほとんどのケースをカバーしていると思います。私はthis siteから取られた620の不規則な動詞のリストを調べ、それはおよそ84のケースを欠いています。ただ、母音のリストに'w','y'を追加することによって、可能なミスのリストは18例にダウンし

    with open('/tmp/Verblist.vrb', 'rt') as f: 
        err = 0 
        for l in f: 
         if l.startswith('>'): 
          forms = l[1:].split(' ') 
          guess = present_to_progressive(forms[0]) 
          if forms[4].lower() != guess.lower(): 
           print('CHECK: {} {} {}'.format(forms[0], forms[4], guess)) 
           err += 1 
        print(err) 
    

    CHECK: Aby/Abey Abying/Abeying Aby/Abeying -- Correct 
    CHECK: Eat Eating Eatting 
    CHECK: Fordo/Foredo Fordoing Fordo/Foredoing -- Correct in one of the 2 variants 
    CHECK: Forget Foregetting Forgetting   -- Correct, the list has a typo 
    CHECK: Lie Lying Lieing      -- Fixed in your second version 
    CHECK: Mischoose Mischoosins Mischoosing  -- Correct, the list has a typo 
    CHECK: Miswed Miswedding Misweding 
    CHECK: Outswim Outswimming Outswiming 
    CHECK: Overlie Overlying Overlieing   -- Fixed in your second version 
    CHECK: Quit Quitting Quiting 
    CHECK: Relearn Relearn Relearning 
    CHECK: Rewed Rewedding Reweding 
    CHECK: Rewet Rewetting Reweting 
    CHECK: Rewin Rewinning Rewining 
    CHECK: Swim Swimming Swiming 
    CHECK: Underlie Underlying Underlieing  -- Fixed in your second version 
    CHECK: Vex Vexing Vexxing 
    CHECK: Zinc Zincking Zincing 
    

    これらの最も重要なのは特殊なケース「嘘」を追加取り組むことができ最後の子音を2倍にするというルールを改善しました。私はあなたが非常にまれな動詞を無視して安全に決めるかもしれないと思います。

    関連する問題