Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中从列表元素中提取基本单词_Python - Fatal编程技术网

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

如何在Python中从列表元素中提取基本单词,python,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'

我有一张单子

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']

有什么方法可以做到吗?

要从常见的句子中提取数据,你必须创建一个单词字典(就像真正的字典(我们指的是意义)。在您的情况下,本词典必须包含与数量相关的单词,如
cup
cups
gram
grams
,以及表示动作过去时的单词,如
chopped
minced
,等等

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

  • 任何数字(int、double、float等)(您可以将
    1/2
    解析为中间带有
    /
    字符的数字)
  • 与词典条目相匹配的单词
  • 任何特殊字符(以及逗号、分号等终端标记)

正如评论中所指出的,“基本词汇”的定义尚不明确。但是如果你想保留一个“非必要”单词的集合,问题很简单。首先,数据:

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)
第二个是函数,它接受一个单词并确定它是否通常是坏的。如果单词出现在
坏单词中或包含数字,则该单词为坏单词

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))
结果是:

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

你如何定义“基本词汇”?还有,你们到底试过做什么?你们在坚持什么?嗯,我在考虑摆脱所有的数字和数词。比如说,我可以制作一个特殊的数字列表和计算单词,如果列表中的任何元素包含与特殊列表中的元素匹配的字符串,那么该元素的字符串应该被删除。是的,你可以这样做。不过,这还需要一些编码(就像大多数与字符串操作有关的事情一样)。太棒了!你能给我一点提示吗?我想试一试。非常感谢你!基本上,你所要做的就是遍历你的列表(例如:<代码>中的s成分:
),然后根据你的标准分析每个字符串(我个人会使用Python,但其他方法也可以)。我建议你试着这样做,谷歌搜索任何你正在努力解决的问题,只有当你无法解决一个特定的(子)问题时,在SOThank you上发布一个问题,非常感谢!我确实意识到我需要创建一个“基本词汇”列表。