为了解决东方财富新闻API返回低质量、不相关新闻的问题,我们开发了一套完整的新闻过滤解决方案。该方案可以有效提高新闻分析师的分析质量,过滤掉ETF、指数基金等不相关的新闻内容。
from tradingagents.utils.news_filter import create_news_filter
# 创建过滤器
filter = create_news_filter('600036') # 招商银行
# 获取原始新闻
from tradingagents.dataflows.akshare_utils import get_stock_news_em
original_news = get_stock_news_em('600036')
# 过滤新闻
filtered_news = filter.filter_news(original_news, min_score=30)
# 查看过滤统计
stats = filter.get_filter_statistics(original_news, filtered_news)
print(f"过滤率: {stats['filter_rate']:.1f}%")
from tradingagents.utils.enhanced_news_filter import create_enhanced_news_filter
# 创建增强过滤器
enhanced_filter = create_enhanced_news_filter(
'600036',
use_semantic=False, # 是否使用语义相似度
use_local_model=False # 是否使用本地分类模型
)
# 执行增强过滤
enhanced_result = enhanced_filter.filter_news_enhanced(news_data, min_score=40)
from tradingagents.utils.news_filter_integration import create_filtered_realtime_news_function
# 创建增强版实时新闻函数
enhanced_news_func = create_filtered_realtime_news_function()
# 直接获取过滤后的新闻报告
filtered_report = enhanced_news_func(
ticker="600036",
curr_date="2025-07-28",
enable_filter=True, # 启用过滤
min_score=30 # 最低评分阈值
)
过滤前:
1. 上证180ETF指数基金(530280)自带杠铃策略
2. 银行ETF指数(512730)多只成分股上涨
3. 无标题
4. 招商银行发布2024年第三季度业绩报告
5. 招商银行与科技公司签署战略合作协议
过滤后:
1. 招商银行发布2024年第三季度业绩报告 (评分: 85.0)
2. 招商银行与科技公司签署战略合作协议 (评分: 75.0)
ModuleNotFoundError: No module named 'tradingagents.utils.news_filter'
解决: 确保文件路径正确,检查sys.path设置
过滤后新闻数量为0
解决: 降低min_score阈值,检查新闻数据格式
过滤速度较慢
解决: 使用基础过滤器,避免启用语义分析
# 启用详细日志
import logging
logging.basicConfig(level=logging.INFO)
# 查看过滤详情
filter.debug_mode = True
filtered_news = filter.filter_news(news_data, min_score=30)
class CustomNewsFilter(NewsRelevanceFilter):
def __init__(self, ticker):
super().__init__(ticker)
# 添加自定义关键词
self.exclude_keywords.extend(['自定义排除词'])
self.include_keywords.extend(['自定义包含词'])
def calculate_custom_score(self, title, content):
# 实现自定义评分逻辑
score = 0
# ... 自定义逻辑
return score
# 集成sentence-transformers
from sentence_transformers import SentenceTransformer
class SemanticNewsFilter:
def __init__(self, ticker):
self.model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
self.ticker = ticker
def calculate_semantic_score(self, text):
# 实现语义相似度计算
pass
如有问题或建议,请参考:
test_news_filtering.py
demo_news_filtering.py
NEWS_QUALITY_ANALYSIS_REPORT.md
NEWS_FILTERING_SOLUTION_DESIGN.md