在Python中使用正则表达式提取文章中的形容词需要结合语言特性处理。以下是分步解决方案:
- 英文场景解决方案(推荐使用专业NLP库):
import re
import nltk
nltk.download('averaged_perceptron_tagger') # 首次使用需要下载text = "The quick brown fox jumps over the lazy dog. Interesting discoveries await us."# 方法1:正则表达式基础匹配(准确性有限)
# 匹配常见形容词后缀模式
adj_pattern = r'\b\w+(?:able|ible|al|ful|ic|ive|less|ous|y|ed|ing)\b(?!\s*[\w-]+)'
adjectives = re.findall(adj_pattern, text, flags=re.IGNORECASE)# 方法2:使用nltk词性标注(推荐)
words = nltk.word_tokenize(text)
tagged = nltk.pos_tag(words)
proper_adjectives = [word for word, pos in tagged if pos in ['JJ', 'JJR', 'JJS']]print("正则匹配结果:", adjectives)
print("NLP解析结果:", proper_adjectives)
- 中文场景解决方案(需要分词和词性标注):
import jieba
import jieba.posseg as psegtext = "美丽的花儿在阳光下绽放,散发着迷人的芬芳。"# 使用结巴分词进行词性标注
words = pseg.cut(text)
adjectives = [word for word, flag in words if flag.startswith('a')] # a开头表示形容词print("中文形容词提取结果:", adjectives)
关键说明:
-
正则表达式的局限性:
- 无法准确处理不规则形容词(good/better/best)
- 可能误判名词的形容词形式(如"apple juice"中的"apple")
- 无法识别复合形容词(如"state-of-the-art")
-
推荐方案:
- 英文:使用spaCy(更精准的词性标注)
import spacy nlp = spacy.load('en_core_web_sm') doc = nlp("The quick brown fox...") adjectives = [token.text for token in doc if token.pos_ == 'ADJ']
- 中文:推荐使用LTP或HanLP等专业中文NLP工具
-
增强正则方案(英文):
# 匹配标准形容词模式(包含比较级/最高级)
adj_pattern = r'''\b # 单词边界(?: # 非捕获组(?:[A-Za-z]+) # 基础形容词(?: # 可选后缀(?:er|est)? # 比较级/最高级|(?:ly) # 副词形式(需额外过滤)|(?:ed|ing) # 分词形式(需额外过滤)))\b # 单词边界
'''
adjectives = re.findall(adj_pattern, text, re.VERBOSE | re.IGNORECASE)
建议根据实际需求选择方案:
- 快速简单需求:使用基础正则表达式
- 准确分析需求:使用NLP工具库(推荐spaCy/NLTK)
- 中文处理:必须使用中文分词工具(如jieba、LTP)
注意:纯正则方案无法达到专业NLP工具90%以上的准确率,在正式文本分析中建议优先使用成熟的NLP库。