要实现中英文混合文本的关键词提取,可以采用对中英文分别处理的方式。下面是一个使用jieba
处理中文和sklearn
处理英文的混合实现示例:
import re
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from collections import Counter
# 定义中英文分词函数
def mixed_segmentation(text):
# 先将文本按空格分割,以处理英文部分
words = text.split()
# 对于每个可能的英文单词,如果它不是英文,则尝试用jieba分词
words = [word if re.match(r'^[A-Za-z]+$', word) else ' '.join(jieba.cut(word)) for word in words]
# 合并分词结果
segmented_text = ' '.join(words)
return segmented_text
def extract_keywords(text, top_n=10):
# 中英文混合分词
segmented_text = mixed_segmentation(text)
# 使用TF-IDF算法计算词频-逆文档频率
vectorizer = TfidfVectorizer(stop_words='english', ngram_range=(1, 2))
tfidf_matrix = vectorizer.fit_transform([segmented_text])
# 获取每个词语(包括单个单词和二元词组)的TF-IDF值
word_scores = zip(vectorizer.get_feature_names_out(), tfidf_matrix.toarray()[0])
# 根据TF-IDF值对词语排序
sorted_word_scores = sorted(word_scores, key=lambda x: x[1], reverse=True)
# 提取前top_n个最高得分的词语作为关键词
top_keywords = [word for word, score in sorted_word_scores[:top_n]]
return top_keywords
# 示例用法:
mixed_article_text = "Your 中英文混合 article text goes here..."
keywords = extract_keywords(mixed_article_text)
print("Top keywords:", keywords)
在这个示例中,我们定义了一个mixed_segmentation
函数,它首先按照空格将文本分割成可能的英文单词。对于每个可能的英文单词,我们检查它是否全为英文字母,如果是,则保留原样;如果不是,则使用jieba.cut
进行中文分词,并将结果合并成一个字符串。这样处理后,得到的segmented_text
包含了经过中英文混合分词的文本。
接下来,我们在extract_keywords
函数中使用TfidfVectorizer
处理这个分词后的文本。这里我们设置ngram_range=(1, 2)
来同时考虑单词和二元词组。其他步骤与之前处理纯英文文本的示例相同。
需要注意的是,这种方法假设文本中的英文部分已经正确分隔(即英文单词间有空格)。如果实际文本中英文单词间无空格或者存在其他特殊情况,可能需要进一步完善分词逻辑。此外,尽管jieba
能够很好地处理大部分中文分词任务,但在处理一些专业术语或特定领域词汇时,可能需要额外添加自定义词典以提升分词准确性。
总之,上述代码提供了一个基础的中英文混合文本关键词提取框架,您可以根据实际需求进一步优化分词策略、停用词列表、TF-IDF参数等,以适应不同的应用场景。
当前文章价值0.98元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)
评论已关闭!