2016-10-16 5 views
0

私は文字列のリストと接尾辞のリストを持っています。文字列に接尾辞のいずれかが含まれている場合、その特定の文字列を文字列から削除するにはどうすればよいですか?文字列にリストの接尾辞が含まれている場合、その特定の接尾辞を文字列から削除するにはどうすればよいですか?

b = ["food", "stuffing", "hobbitses"] 
y = ["ing", "es", "s", "ly"] 


def stemming(): 
    for i in range(len(b)): 
     if b[i].endswith(tuple(y)): 
      b[i] = b[i] - #??? 
print b 

答えて

1

私は、ステム除去を独自の機能に分けて、リスト全体または別の機能を使用することをお勧めします。ここで

def remove_stems(word, stems): 
    for stem in stems: 
     if word.endswith(stem): 
      return word[:-len(stem)] 
     else: 
      return word 

b_without_stems = [remove_stem(word, stems) for word in b] 
0

それを行うための一つの方法だあなたは彼らに代わり、一度にそれらすべてをチェックしようとする時のいずれかをチェックする必要があるので、発見された結末を知る必要があります。エンディングを見つけたら、スライスを使って切り抜くことができます。あなたが最初のサフィックスを取り除きたいと仮定し

b = [suffix.sub("", w) for w in b] 
1

import re 
suffix = re.compile("(%s)$" % "|".join(y)) 

def stemming(): 
    for i, word in enumerate(b): 
     b[i] = suffix.sub("", word) 

はその後、簡単にリストの内包表記を使用して語幹を行うことができます。

def stemming(): 
    for i, word in enumerate(b): 
     for suffix in y: 
      if word.endswith(suffix): 
       b[i] = word[:-len(suffix)] 
       break 

より良いアプローチは、正規表現を使用しますこれがそれを行うことがわかった

def stemming(strings, endings): 
    for i, string in enumerate(strings): 
     for ending in endings: 
      if string.endswith(ending): 
       strings[i] = string[:-len(ending)] 
       continue 
関連する問題