如何从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开头的单词?的主要内容,如果未能解决你的问题,请参考以下文章

Python 从键盘输入5个英文单词,输出以元音字母开头的单词?

从python中的图像中提取希伯来语文本

python提取指定字符中间的内容?

python 如何提取特定字符中间的内容

如何从 Firebase 获取名称以某个字符串开头的记录?

python中如何从字符串中提取数字?