如何从Python中的文本中提取以字母A到L开头的单词?
Posted
技术标签:
【中文标题】如何从Python中的文本中提取以字母A到L开头的单词?【英文标题】:How to extract words starting with letters from A to L from a text in Python? 【发布时间】:2022-01-21 22:54:23 【问题描述】:语言:Python
所以我在不使用外部库的情况下从文本中提取了命名实体。然后我想创建两个列表,一个用于以 A-L 开头的名称;另一个以 M-Z 开头的名称。我写了这段代码,但它没有返回任何输出。有人看到这里有什么问题吗?请注意,我一般是编码初学者,可能不熟悉术语。
AL = []
MZ = []
for match in matches:
if ((match[0] >= "A") and (match[0] <= "L")):
AL.append(match)
print("Words between A-L are: ", AL)
elif ((match[0] >= "M" and match[0] <= "Z")):
MZ.append(match)
print("Words between M-Z are: ", MZ)
编辑:
有人问我“匹配”是从哪里来的:
pattern = re.compile(r'\.?\s\b[A-Z][a-z]\w+')
matches = pattern.findall(text)
# print(matches)
这是我试图在 A-L 和 M-Z 之间对名称进行排序的输出列表:
matches = ['Rossini', 'William Tell', 'America', 'Athabaskan', 'Mackenzie River', 'Morse', 'Trappist', 'Plains', 'India']
我所说的“它不起作用”的意思是它返回空括号。
Names between A and L: []
Names between M and Z: []
感谢大家的贡献。
【问题讨论】:
什么是匹配,什么是输入,预期与实际输出是什么,你在哪里显示输出?你用过调试器吗?例如。match
有什么价值,match[0]
是什么,......
虽然对我有用
是的,我应该澄清那部分。我在不使用 NLTK 或 Spacy 的情况下从文本中提取名称实体。匹配来自:pattern = re.compile(r'\.?\s\b[A-Z][a-z]\w+') 匹配 = pattern.findall(text)
很难像您提出的那样有帮助地回答问题。这就是@luk2302 发表评论的原因。请编辑您的问题,以便更容易回答。我建议阅读:minimal reproducible example 和 What Do You Mean "It Doesn't Work"?。
特别是,您能否在matches
中明确填写代码以重现您的问题?我的意思是,在问题代码的开头添加一行matches = ["Al", "Bob", "Todd", "Zack", "todd", "zack"]
或类似的东西;然后告诉我们你得到了什么输出,以及你期望的输出。
【参考方案1】:
那么看下面的例子:
def filter_words(words):
AL = []
MZ = []
unclassified = []
for word in words:
if ((word[0] >= "A") and (word[0] <= "L")):
AL.append(word)
elif ((word[0] >= "M" and word[0] <= "Z")):
MZ.append(word)
else:
unclassified.append(word)
return AL, MZ, unclassified
AL, MZ, unclassified = filter_words(["Al", "Bob", "Todd", "Zack", "todd", "zack"])
print(AL)
print(MZ)
print(unclassified)
输出
['Al', 'Bob']
['Todd', 'Zack']
['todd', 'zack']
根据您的要求,您可能需要在处理 if 语句之前调用 word.upper()
,因为您可以看到 - 如果名称以小写开头将是未分类的
【讨论】:
【参考方案2】:这里你必须注意单词大小写:
matches = ['Arbre', 'Amie', 'Maison', 'Ligne', 'Zebre', 'Maths']
AL = []
MZ = []
for match in matches:
match = match.upper()
if ((match[0] >= "A") and (match[0] <= "L")):
AL.append(match)
elif ((match[0] >= "M" and match[0] <= "Z")):
MZ.append(match)
print("Words between A-L are: ", AL)
print("Words between M-Z are: ", MZ)
输出是:
Words between A-L are: ['ARBRE', 'AMIE', 'LIGNE']
Words between M-Z are: ['MAISON', 'ZEBRE', 'MATHS']
【讨论】:
以上是关于如何从Python中的文本中提取以字母A到L开头的单词?的主要内容,如果未能解决你的问题,请参考以下文章