我正在尝试对客户反馈进行分类,我在python中运行了一个LDA,得到了以下10个主题的输出:
modelBuilder.Entity<Course>().HasRequired(c => c.Caption).WithRequiredPrincipal(c => c.Course);
有没有办法自动标注它们?我有一个csv文件,其中有手动标记的反馈,但我不想自己提供这些标签。我希望模型创建标签。有可能吗?
答案 0 :(得分:1)
此处的评论链接到另一个a paper链接的SO答案。假设您想做最少的事情来尝试完成这项工作。这是对我有用的MVP风格的解决方案:在Google中搜索字词,然后在响应中查找关键字。
虽然有些hacky,但这里有一些工作代码:
pip install cssselect
然后
from urllib.parse import urlencode, urlparse, parse_qs
from lxml.html import fromstring
from requests import get
from collections import Counter
def get_srp_text(search_term):
raw = get(f"https://www.google.com/search?q={topic_terms}").text
page = fromstring(raw)
blob = ""
for result in page.cssselect("a"):
for res in result.findall("div"):
blob += ' '
blob += res.text if res.text else " "
blob += ' '
return blob
def blob_cleaner(blob):
clean_blob = blob.replace(r'[\/,\(,\),\:,_,-,\-]', ' ')
return ''.join(e for e in blob if e.isalnum() or e.isspace())
def get_name_from_srp_blob(clean_blob):
blob_tokens = list(filter(bool, map(lambda x: x if len(x) > 2 else '', clean_blob.split(' '))))
c = Counter(blob_tokens)
most_common = c.most_common(10)
name = f"{most_common[0][0]}-{most_common[1][0]}"
return name
pipeline = lambda x: get_name_from_srp_blob(blob_cleaner(get_srp_text(x)))
然后,您可以从模型中获取主题词,例如
topic_terms = "delivery area mile option partner traffic hub thanks city way"
name = pipeline(topic_terms)
print(name)
>>> City-Transportation
和
topic_terms = "package address time customer apartment delivery number item support door"
name = pipeline(topic_terms)
print(name)
>>> Parcel-Package
您可以对此进行很多改进。例如,您可以使用POS标签仅找到最常见的名词,然后将其用作名称。或找到最常见的形容词和名词,并命名为“形容词名词”。更好的是,您可以从链接的站点获取文本,然后运行YAKE提取关键字。
无论如何,这演示了一种简单的方法来自动命名集群,而无需使用机器学习直接 (尽管Google肯定会使用它来生成搜索结果,因此您会从中受益)。