如果字符串包含列表中的后缀,如何从字符串中删除该特定后缀?

时间:2016-10-16 20:01:19

标签: python string python-2.7 stemming

我有一个字符串列表和一个后缀列表。如果字符串包含其中一个后缀,如何从字符串中删除该特定字符串?

{{1}}

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

假设您要删除找到的第一个后缀

def stemming(strings, endings):
    for i, string in enumerate(strings):
        for ending in endings:
            if string.endswith(ending):
                strings[i] = string[:-len(ending)]
                continue

答案 2 :(得分:0)

您需要知道找到了哪个结尾,因此您需要一次检查一个结尾,而不是一次性检查它们。找到结尾后,可以使用切片将其切掉。

#!/usr/bin/env bash

# Vagrant instance provision script

# Php 7.0
sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update

# Apache 2.4
sudo add-apt-repository ppa:ondrej/apache2 -y
sudo apt-get update
sudo apt-get install apache2 -y
if ! [ -L /var/www ]; then
  rm -rf /var/www/html
  ln -fs /vagrant /var/www/html
fi

# Changed this line
sudo apt-get install php7.0 -y

更好的方法是使用正则表达式:

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

然后你可以使用列表理解轻松地进行词干化:

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

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