You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不借助nltk、spacy等外部库,仅用Regex判断词性

仅用正则表达式识别英文单词的词性(名词、形容词、动词)

仅靠正则表达式识别词性只能基于英文单词的构词后缀,无法处理不规则词、多义词,也做不到100%准确,但可以覆盖大部分常见规则词的判断。以下是具体实现思路和示例:

核心思路:基于词性后缀的正则匹配

英文中不同词性通常有固定的后缀,我们可以针对这些后缀编写正则模式,匹配对应的词性。

1. 名词识别

常见名词后缀包括:-tion, -sion, -ment, -ness, -ity, -ship, -hood, -dom, -ance, -ence,以及复数形式的-s, -es。
对应的正则模式:

noun_pattern = re.compile(r'^(.*)(tion|sion|ment|ness|ity|ship|hood|dom|ance|ence|s|es)$', re.IGNORECASE)

示例匹配:action, happiness, friendship, cats

2. 形容词识别

常见形容词后缀包括:-able, -ible, -al, -ful, -less, -ous, -ic, -ive, -y, -ish。
对应的正则模式:

adj_pattern = re.compile(r'^(.*)(able|ible|al|ful|less|ous|ic|ive|y|ish)$', re.IGNORECASE)

示例匹配:comfortable, helpful, selfish, happy

3. 动词识别

常见动词后缀包括:-ate, -ify, -ize, -en,以及分词形式的-ing, -ed。
对应的正则模式:

verb_pattern = re.compile(r'^(.*)(ate|ify|ize|en|ing|ed)$', re.IGNORECASE)

示例匹配:organize, simplify, widen, running

完整实现示例(Python)

import re

# 预编译正则模式,提升匹配效率
noun_pattern = re.compile(r'^(.*)(tion|sion|ment|ness|ity|ship|hood|dom|ance|ence|s|es)$', re.IGNORECASE)
adj_pattern = re.compile(r'^(.*)(able|ible|al|ful|less|ous|ic|ive|y|ish)$', re.IGNORECASE)
verb_pattern = re.compile(r'^(.*)(ate|ify|ize|en|ing|ed)$', re.IGNORECASE)

def guess_pos(word):
    # 优先级:先匹配名词和形容词,再匹配动词(避免分词后缀被误判)
    if noun_pattern.match(word):
        return "名词(推测)"
    elif adj_pattern.match(word):
        return "形容词(推测)"
    elif verb_pattern.match(word):
        return "动词(推测)"
    else:
        return "无法通过正则确定词性"

# 测试用例
test_words = ["action", "comfortable", "organize", "run", "happiness", "excited", "cats"]
for word in test_words:
    print(f"{word}: {guess_pos(word)}")

关键局限性说明

  • 不规则词无法识别:比如go(动词)、child(名词)这类无固定后缀的单词,正则无法匹配。
  • 多义词歧义无法区分:比如excited既可以是动词过去式,也可以是形容词;running可以是动词现在分词、形容词或名词,正则无法判断具体语境。
  • 后缀重叠误判:少数单词可能同时符合多个词性后缀,需要根据实际需求调整匹配优先级。

内容的提问来源于stack exchange,提问作者Jap Ndufor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:50:21