elasticsearch,nlp,Python,Postgresql,Parsing,elasticsearch,Nlp" /> elasticsearch,nlp,Python,Postgresql,Parsing,elasticsearch,Nlp" />

Python 如何在文本块中找到所有已知的成分字符串?

Python 如何在文本块中找到所有已知的成分字符串?,python,postgresql,parsing,elasticsearch,nlp,Python,Postgresql,Parsing,elasticsearch,Nlp,给定一系列成分: text=“”成分:有机蔗糖、全麦面粉、, 单甘油三酯和双甘油三酯。在使用坚果的工厂生产 我如何从我的postgres数据库中提取成分,或在我的elasticsearch索引中找到它们,而不匹配标记,如成分:或坚果 预期产出将是: 成分=过程(文本) #[‘蔗糖’、‘全麦面粉’、‘单甘油三酯’] 这个Python代码给了我这个输出:[‘有机蔗糖’、‘全麦面粉’、‘单甘油三酯和双甘油三酯’] 它要求配料在“配料:”之后,所有配料都列在“.”之前,就像你的情况一样 import

给定一系列成分:

text=“”成分:有机蔗糖、全麦面粉、,
单甘油三酯和双甘油三酯。在使用坚果的工厂生产
我如何从我的postgres数据库中提取成分,或在我的elasticsearch索引中找到它们,而不匹配标记,如
成分:
坚果

预期产出将是:

成分=过程(文本)
#[‘蔗糖’、‘全麦面粉’、‘单甘油三酯’]

这个Python代码给了我这个输出:
[‘有机蔗糖’、‘全麦面粉’、‘单甘油三酯和双甘油三酯’]
它要求配料在“配料:”之后,所有配料都列在“.”之前,就像你的情况一样

import re
text = """Ingredients: organic cane sugar, whole-wheat flour,
   mono & diglycerides. Manufactured in a facility that uses nuts."""

# Search everything that comes after 'Ingredients: ' and before '.'
m = re.search('(?<=Ingredients: ).+?(?=\.)', text, re.DOTALL) # DOTALL: make . match newlines too
items = m.group(0).replace('\n', ' ').split(',') # Turn newlines into   spaces, make a list of items separated by ','
items = [ i.strip() for i in items ] # Remove leading whitespace in each item
print items
重新导入
text=“”成分:有机蔗糖、全麦面粉、,
单甘油三酯和双甘油三酯。在使用坚果的工厂生产
#搜索“配料”之后和之前的所有内容

m=re.search(“(?在“成分:””的确切字符串后面用逗号分隔的所有内容是否太天真?为什么不列出所有成分的列表,然后在文本中查找它们?语料库的大小?根据您的输入,这可能是一项相当复杂的任务,因为可能有许多语法和变体(除非您的输入总是以
成分:a、b、c和d.注释的形式出现。
,但这通常不适用于大量真实数据)。我已经做了好几次,最后总是得到某种解析器。一个基于Ruby的实现是,它用于解析。由于它不是基于Python的,所以我将此作为注释而不是答案。