如何将列表中的所有单词和短语放入搜索表达式中(Python)

How to put all words and phrases in list into a search expression (Python)

我有这个清单:

groups = [['|FOOD|','shrimps','chicken wok','bowl of rice'],['|DRINK|','water','cranberry juice','tea']]

我试图让输出为:

[['|FOOD|',
  '[lemma="shrimps"]',
  '[lemma="chicken"][lemma="wok"]',
  '[lemma="bowl"][lemma="of"][lemma="rice"]'],
 ['|DRINK|',
  '[lemma="water"]',
  '[lemma="cranberry"][lemma="juice"]',
  '[lemma="tea"]']]

所以,基本上我需要为语料库搜索对每个词进行词形还原。不过,有些词不是词,而是 短语 单字的代码我才算出来,这里是:

import re
groups = [[f'[lemma="{word}"]' if not ' ' in word and not re.search(r'\|.*\|', word) else word for word in group] for group in groups]

这 returns 为:

[['|FOOD|', 
  '[lemma="shrimps"]', 
  'chicken wok', 
  'bowl of rice'],
 ['|DRINK|', 
  '[lemma="water"]', 
  'cranberry juice', 
  '[lemma="tea"]']]

所以我让它不包括包含空格的单词(phrases),加上主题词。那么处理这些短语并使它们看起来像我上面输入的代码是什么?

我是初学者,所以如果您知道组织所有这些数据的更好方法,请告诉我。

这里你真的不需要正则表达式,你可以使用if not word.startswith("|") and not word.endswith("|")来检查条目是否两端都没有管道:

groups = [[''.join([r"""[lemma="{}"]""".format(w) for w in word.split()]) if not word.startswith("|") and not word.endswith("|") else word for word in group] for group in groups]

Python demo online。输出:

[['|FOOD|', 
 '[lemma="shrimps"]', 
 '[lemma="chicken"][lemma="wok"]', 
 '[lemma="bowl"][lemma="of"][lemma="rice"]'], 
['|DRINK|', 
 '[lemma="water"]', 
 '[lemma="cranberry"][lemma="juice"]', 
 '[lemma="tea"]']
 ]