Python中俚语的词形还原:助力Twitter文本SVM分类
针对Twitter文本的俚语修正与词形归一化方案
当然可以搞这类文本预处理!而且针对Twitter这种满是俚语、拼写放飞的非正式文本,这步操作甚至是提升SVM分类效果的关键——毕竟SVM吃的是特征一致性,统一的词汇形式能大大减少特征空间的冗余。
下面给你几个实用的处理方向:
1. 先搞定俚语/拼写错误修正
Twitter里的俚语(比如bout→about、tryna→trying to、fucc→fuck)是高频坑,你可以这么处理:
- 自定义俚语映射表:手动整理或者找公开的Twitter俚语数据集导出映射(比如
{"bout": "about", "tryna": "trying to", "holla": "holler", "fucc": "fuck", "im": "i am"}),然后用字符串批量替换。这种方法精准度拉满,适合覆盖高频俚语。 - 结合拼写校正工具:比如用
textblob的拼写校正,但它更偏向通用文本,对Twitter俚语适配一般,建议先做自定义替换再用它补漏。示例代码:from textblob import TextBlob # 先做自定义俚语替换 slang_map = {"bout": "about", "tryna": "trying to", "fucc": "fuck", "im": "i am"} tweet = "Word I'm bout to holla at her via twitter RT @iamJay_Fresh : #trushit - im tryna fucc nicki minaj lol" for slang, formal in slang_map.items(): tweet = tweet.replace(slang, formal) # 再做拼写校正补漏 corrected_tweet = str(TextBlob(tweet).correct())
2. 词干提取/词形还原跟上
俚语修正之后,再做词干或词形还原,进一步统一词汇形式:
- 词干提取:快速粗暴型,适合追求效率的场景,比如用
nltk的PorterStemmer:from nltk.stem import PorterStemmer from nltk.tokenize import word_tokenize stemmer = PorterStemmer() tokens = word_tokenize(corrected_tweet) stemmed_tokens = [stemmer.stem(token.lower()) for token in tokens] # 比如"holler"会变成"holl","trying"变成"tri" - 词形还原:更精准,会还原到词汇原型,比如用
nltk的WordNetLemmatizer(记得指定词性会更准):from nltk.stem import WordNetLemmatizer from nltk.tokenize import word_tokenize from nltk.corpus import wordnet import nltk def get_wordnet_pos(tag): if tag.startswith('J'): return wordnet.ADJ elif tag.startswith('V'): return wordnet.VERB elif tag.startswith('N'): return wordnet.NOUN elif tag.startswith('R'): return wordnet.ADV else: return wordnet.NOUN lemmatizer = WordNetLemmatizer() tokens = word_tokenize(corrected_tweet) tagged_tokens = nltk.pos_tag(tokens) lemmatized_tokens = [lemmatizer.lemmatize(token.lower(), get_wordnet_pos(tag)) for token, tag in tagged_tokens] # 比如"hollering"会变成"holler","trying"能还原到"try"
3. 额外的Twitter专属预处理小技巧
除了上面的步骤,这些操作也能帮你优化特征:
- 选择性移除RT标签、@提及、话题标签(比如
@iamJay_Fresh、#trushit),或者把话题标签单独拎出来作为特征; - 处理缩写(比如
I'm→I am),很多NLP工具包都有现成的处理函数; - 根据任务决定是否移除无意义语气词(比如
lol,如果是情感分析可能要留,主题分类可以删掉)。
最后提个醒:预处理的程度要跟着你的分类任务走——如果是情感分析,别把所有语气词都删了;如果是主题分类,俚语修正和词形归一化的优先级就更高。
内容的提问来源于stack exchange,提问作者James Ko
相关产品推荐
相关产品推荐

