如何从Python中的列表元素中提取基本单词

时间:2016-10-29 18:37:07

标签: python

我有一个清单

ingredient = ['2 tablespoons butter',
 '1 1/2 cups long-grain rice',
 '1/2 cup chopped onion',
 '1/2 cup chopped green bell pepper',
 '1 clove garlic, minced']

我想从每个元素中提取必要的单词,使列表成为

['butter',
 'long-grain rice',
 'onion',
 'green bell pepper',
 'garlic']

有办法吗?

2 个答案:

答案 0 :(得分:2)

要从常用句子中提取数据,您必须创建一个词典(如真正的词典(我们指的是含义))。在您的情况下,此词典必须包含与cupcupsgramgrams等数量相关的字词以及表示chopped等操作的过去时的字词},minced

现在迭代第一个列表。 按空格拆分列表中的每个条目。 从拆分列表中删除以下内容:

  • 任何数字(int,double,float等)(您可以将1/2解析为其中包含/个字符的数字)
  • 与您的词典条目匹配的字词
  • 任何特殊字符(以及逗号,分号等终端标记)

答案 1 :(得分:2)

正如评论中所指出的,“基本词”的定义在空中。但是如果你想保留一系列“非必要”词汇,问题就很简单了。首先,数据:

double xscale = printer.pageRect().width()/double(ui->table_log->width());
double yscale = printer.pageRect().height()/double(ui->table_log->height());
double scale = qMin(xscale, yscale);
painter.scale(scale, scale);

然后我们创建了一些简短的辅助函数来提高可读性。第一个接受一个字符串并确定它是否包含数字。我们将使用它来抛出像ingredients = ['2 tablespoons butter', '1 1/2 cups long-grain rice', '1/2 cup chopped onion', '1/2 cup chopped green bell pepper', '1 clove garlic, minced'] BAD_WORDS = { 'chopped', 'cup', 'cups', 'clove', 'tablespoons', 'minced' }

这样的单词
'1/2'

第二个是接受一个单词并确定它是否通常不好的功能。如果一个单词出现在def contains_digit(w): return any(c.isdigit() for c in w) 中或者包含一个数字,那么这个单词就不好了。

BAD_WORDS

然后我们系统地删除了坏词:

def is_bad(w):
    return (w in BAD_WORDS) or contains_digit(w)

结果是:

extracted = []
for entry in ingredients:
    words = [w.strip(',') for w in entry.split()]
    remaining = [w for w in words if not is_bad(w)]
    extracted.append(' '.join(remaining))