首页 SEO攻略 正文

SEO 人员如何在公司中发挥主观能动性,完成数据清洗工作?

SEO攻略 2024-11-09 18

前言

如果不是有一位CEO主动挖来高薪SEO人员并空降,说实话,很多SEO人员都会处于公司的“弱势群体”。

绝大多数普通SEO人员在公司或跨部门沟通中没有太多发言权,有很多细节任务没有得到相关配合。

在这样的环境下,SEOer要想做好工作,就必须充分发挥自己的主观能动性,千方百计完成那些表面上不值一提、暗地里不可避免的事情。

问题

全网大量挖掘长尾词,是SEO和SEM必须做的事情。然而大规模的长尾词注定会带来一些数据清洗工作。大多数情况下,清理工作都可以在Excel中完成,但也有很多情况。 Excel 很难处理,例如:

医疗是什么意思_医疗是什么工作_医疗seo是什么

“排水”长尾词

这是从第三方关键词工具下载的词根“排水”的长尾词数据,却遇到了一个尴尬的问题。词根“排水”有同义词但场景不同,因此会导致挖掘出许多不相关的长尾词:

医疗是什么意思_医疗是什么工作_医疗seo是什么

医学上的“排水”

事实上,这种情况很常见。单个词常常不可避免地与其他场景混淆,例如:

水果中的“苹果”、手机中的“苹果”、电影中的“苹果”,是形状相同但完全不同的同义词。简单地使用词根来挖掘单词,自然会发现许多非目标长尾词。

类似的情况还有很多,那么问题来了:消除非目标长尾词是必须做的事情。做好SEO这样的细节工作是理所当然的。老板不会帮我们做,也不会指派人帮我们做。如果这是百万级别的长尾词数据,在Excel中全部过滤掉,那么项目可能就已经泛黄了。

面对如此杂乱的长尾词数据,如何高效地过滤呢?

今天的文章完全是基于技术的,但是对于不懂技术的朋友,强烈建议完整阅读。有两点:

技术是另一种思维方式。对于不懂技术的朋友,可以看看技术人员遇到问题时是如何处理的。

在“网络营销”工作中,有很多工作是超出我们能力范围的,但是充分发挥我们的主观能动性,超越这个职位所要求的能力水平,往往会带来额外的收获。

开始

前段时间我接手了一个收藏项目(只是熟人之间的合法生意)。随着采集量的增大,“过滤敏感词”的任务不可避免,包括政治、色情、恐怖主义、广告等,这些相关词必须被识别出来。

目前,市场上可以收集到的敏感词汇数据库,只需整合其中的几个,就可以达到数万甚至更多,因为随着时间的推移,会产生各种各样的新词汇。

使用程序识别文章是否包含目标敏感词,以Python为例:

refusalWord = '敏感词'
targetText = '内容正文'
if refusalWord in target_text:print(True)

让程序在目标文本中搜索这个敏感词。如果找到,则说明存在敏感词。当只有一个敏感词时就会出现这种情况。如果有多个敏感词,也很简单。添加一个循环:

refusalWord = ['敏感词1','敏感词2','敏感词3']
targetText = 
'内容正文'
for word in refusalWord:
if word in target_text:print(True)

程序在目标文本中一一搜索敏感词。如果敏感词有上百个,重复地一一处理显得非常低效,也不太优雅。可以使用正则表达式来非常简洁地做到这一点:

import re

refusalWord = ['敏感词1','敏感词2','敏感词3']
targetText = '内容正文'
if re.search('|'.join(refusalWord),targetText):print(True)

所有敏感词均以“|”连接形成正则表达式:“敏感词1 | 敏感词2 | 敏感词3”。使用此表达式来匹配目标文本并找到所有出现的敏感词。

但如果有数万个甚至更多的敏感词怎么办?了解正则表达式的朋友都知道,这样写的表达式是极其不合理的,可能会导致各种问题。

而且,当敏感词数万甚至更多时,效率会线性下降。再加上后期更换等其他工作,时间成本就更高了。

而且,我们之前的演示只是只有一个目标文本的情况。如果敏感词数量为N,目标文本为M怎么办?如果是简单的双循环,时间复杂度至少为N*M。

这个时候,就需要用到我们今天的主角:“AC自动机”算法。

PS:不懂技术的朋友不用担心代码。他们只需要明白这是一个解决方案优化的问题。我们在面对敏感词从1到N再到N++的过程中不断优化技术方案,提高效率。

AC自动机算法是一种多模式匹配算法。算法的精妙和深度不是我们这样的非科学家能够探究的,但我们还是可以理解算法的意义和区别的。

在上面的例子中,即使不懂技术的朋友也会明白,随着敏感词汇量的不断增加,程序判断一篇文章是否包含敏感词汇中的某个词或词的时间成本也会逐渐增加。 ,因为无意义的判断不断增加,这是一个单一的模式。

AC自动机通过使用多模式匹配算法来解决这个问题,这意味着随着敏感词汇量的增加,时间成本保持不变(至少在一定水平内)。

那么这和我们要讲的关键词清理有什么关系呢?接下来我们将一步步演示。

步骤一:选取有代表性的词根

医疗是什么意思_医疗是什么工作_医疗seo是什么

“排水”长尾词

这是一个“引流”的长尾词汇库,有几十万个。其中长尾词有两类,与互联网推广相关的长尾词和与医疗技术相关的长尾词。我们的目的是将这两类分开。长尾词。

在Excel中,面对这样一条数据时,我们需要将两侧分开,即过滤掉目标或者过滤掉非目标然后消除。我们先来看看一般的操作方法是怎样的:

医疗是什么工作_医疗是什么意思_医疗seo是什么

标记

逐行读取,将非目标数据标记出来,然后过滤掉,全部删除。但如果目标数量是几十万甚至更多,这个效率可想而知。能一行一行读下去的人,都是凶猛的人。

医疗seo是什么_医疗是什么意思_医疗是什么工作

选择词汇

选择一些高频的非目标词或者词,然后过滤掉,反复重复这个操作。这种方法看上去速度非常快,一次可以消除一大片区域。

不过,如果你充分了解关键词的长尾效应,你就会明白这种方法后期会变得更加痛苦,因为很多选中的词后期是无法删除的,反复筛选删除会让人崩溃。

另外,Excel中似乎也没有更好的方法来处理这样的问题。现在我们将用另一种方式来解决这个问题。

老规则是先切分所有长尾词,统计词频:

医疗是什么意思_医疗是什么工作_医疗seo是什么

词频

接下来,我们需要根据“常识”手动选择有代表性的“分类种子根”。从上到下,选择与网络推广相关的词“显然仅”放入文档中,将“显然仅”放入文档中。 “与医疗技术相关的单词被选择并放置在另一个文档中。

所谓“显然只是”,例如:“脚本”,即脚本工具,这样的词基本不可能与医疗技术中的长尾词有任何关系,而“伤口”基本不可能与互联网推广有关。什么关系。

所谓“常识”,比如:经常有一些与网络推广相关的平台名称,比如知乎、微信、淘宝等,这些你都不用想,直接写下来就可以了。

因此,在选择的时候,一定要确定这个词的归属是否明确。如果模糊的话,最好不要使用!

医疗seo是什么_医疗是什么意思_医疗是什么工作

种子根的分类

前者被视为“正”,后者被视为“反”。 “正”是我们目标长尾词的代表词根。我们应该选择多少个?再次强调,关键词符合28原则。

我们可以看到,顶级词根的词频非常高。一个词根可以包含多个长尾词。就这样,我从几十万个长尾词中只选出了180个。

即使长尾词的数量增加10倍,也不会有更多有代表性的词根可供选择。

第2步:扩展代表性词根

我们选择这些种子词的目的很简单:当“正面”种子词放入词汇表时,我们可以过滤掉肯定是目标类别的长尾词。我们选择“微信”作为上面的种子词。我们认为只能是互联网推广相关的长尾词,因此将“微信”纳入词汇表可以过滤掉所有包含“微信”的长尾词。这些与网络推广有关:

医疗是什么工作_医疗seo是什么_医疗是什么意思

与“微信”相关的长尾词

长尾词一般具有以下特征:

微信流量脚本开发

我们通过“微信”提取出这样一个长尾词。除了词根“引流”之外,因为这个长尾词与互联网推广有关,所以其他词根极有可能与互联网推广有关,比如这里的“脚本”和“开发”肯定与医疗技术无关。 相反:

脓肿切开引流手术

我们通过种子词“手术”得到它。分词后的“脓肿”“切口”不可能与网络推广有任何关系。它们可以作为新的种子词添加到“反”类别中。

这个时候思路就清晰了。我们首先选择一些有代表性的种子词,用这些种子词筛选所有相关的长尾词,然后对这些筛选出的长尾词进行分割,利用关键词的相关性得到目标分类包含更多我们没有的种子词在上一步中选择。

所有这些种子词都是我们用于后续分类的基石。

利用这个思路实际上解决了关键词长尾效应的问题。我们无法手动一一选择种子词。通过关联,我们可以自动收集更多我们没有手动选择的种子词。

这些种子词可以帮助我们覆盖更多的长尾词。

PS:这是一个演示想法。筛选必须通过程序批量进行,而不是在Excel上进行。

在这一步中,需要计算提取出的种子词各自的词频并相应保留,以供后续使用。

例如,我们使用“正面”种子词来过滤所有长尾词。所有这些长尾词的词根都是分词后得到的。这个长尾词(过滤掉的)每个词根的总词频是多少。

第三步:筛选代表性词根

医疗是什么工作_医疗seo是什么_医疗是什么意思

扩大分类种子根

到这里我们其实就可以开始区分了,但是还有一些细节需要优化:

1:通过第二步的自动扩展,某个种子词会同时出现在“正面”和“负面”中,例如:“视频”。

这个词出现在与网络推广相关的长尾词中并不奇怪。事实上,它也出现在有关医疗技术“引流”的长尾词中:

医疗是什么意思_医疗seo是什么_医疗是什么工作

“视频”

对于这种情况,我们其实可以思考一个问题:这是偶然还是常态?比如“视频”这个词,其实两边都频繁出现,所以我们根本不想要它,也就是说,它根本不代表它。性别。

如果是偶然,比如“艾滋病”,那也是奇迹。我在词库中看到一个长尾词:

如何销售艾滋病试纸促进引流

除了这个,其他的都是医学的,所以这只是偶然。对比第二步中我们保留的单词出现频率,哪一侧显得压倒性大,我们就保留那一侧的种子词,另一侧直接删除。

如果数据差异不大,那么双方都会直接去除无偏种子词。

根据我的经验,对于大多数此类事故,它们之间的词频对比差异很大。

2:没有倾向性的单词,如数字、字符等,没有倾向性,不应该作为种子词。

其次,类似于:should、how、apply、can、of、is、should,这些副词、助词、连词、情态助词、疑问词等,没有倾向性。分词时,直接根据 jieba 的词性进行剔除:

医疗是什么工作_医疗是什么意思_医疗seo是什么

词性表

这一步过滤完成后,就可以剔除词频数据了。当然,每一个“排水”字都要有它的主根,一定要去掉!

第四步:快速分类

现在我们使用上面计算出的种子词作为关键词。其实这和我们上面给出的集合例子是一样的。这些种子词相当于敏感词,每个待分类的长尾词相当于目标文本内容。

使用 Python 的传统方法类似于:

# 正
seed_word_r = []
# 反
seed_word_e = []
# 词库
keyword = []

for word in keyword:
for r in seed_word_r:
if r in word:
pass
for e in seed_word_e:
if e in word:
 
pass

取出每个长尾词,将每个种子词与其进行比较,看是否包含在内,然后确定分类。

如果有N个长尾词,则外循环会执行N次,有M个词,N中每次都会包含M次。执行成本可想而知。

另外,如果将数以万计甚至更多的词根与一个只有10个左右字符的长尾词一一进行比较,势必会出现太多无意义的比较。

这时候就可以使用AC自动机算法:

import ahocorasick

# 正
seed_word_r = ['种子词1','种子词2','种子词3','种子词4']
tree = ahocorasick.AhoCorasick(*seed_word_r)
print(tree.search('长尾词'))

如上面代码所示,我们将种子词(敏感词)传递给AC自动机构建模型,然后模型可以计算出当前长尾词(目标文本内容)是否包含模型中的某些词,并显示所有出现的情况。

这种计算并不是像上面的方法那样对内循环和外循环进行一对一的比较。

因此,在做上述长尾词分类工作时,可以:

import ahocorasick

# 正
seed_word_r = [
'种子词1','种子词2','种子词3','种子词4']
# 反
seed_word_e = [
'种子词1','种子词2','种子词3','种子词4']
# 词库
keyword = []

# 构建
tree_r = ahocorasick.AhoCorasick(*seed_word_r)
tree_e = ahocorasick.AhoCorasick(*seed_word_e)

# 遍历
for word in keyword:
r = tree_r.search(word)
e = tree_e.search(word)
pass

每次将长尾词传递给双方,瞬间获得双方长尾词的包含。 pass部分用于进行针对性的判断。

有几个可预见的结果:

1:长尾词只属于“正”或者只属于“反”,很简单,分到相应的类别即可。

2:长尾词不属于“正”或“反”。在这种情况下,首先将其分类为一个类别并保存。

3:某个长尾词既属于“正”又属于“负”,需要进一步判断。我们先把这个类型归为一类并保存。

r和e都是集合数据结构,根据长度结合交集和并集确定归属。

医疗seo是什么_医疗是什么工作_医疗是什么意思

分类结果

w1还没有找到,w2同时属于,w3是“正”类,就是我们想要的与互联网推广相关的长尾关键词,w4是“反”,是与互联网推广相关的长尾关键词医疗技术,这是我们不想要的。

3、4的内容不会有问题。如果偶尔分类不准确,找出不准确的词汇,追踪其种子词。这必定意味着某个种子词被错误地选择了。

删掉然后重新运行代码就可以了,所以第一次手动选择的时候一定要选择所有权明确的,不要使用模糊的。

但是我们看到w2,即同时属于它的份额,还有1.9M。打开它看看:

医疗是什么工作_医疗是什么意思_医疗seo是什么

w2

居然有六万多条记录无法分类清楚(截图显示不全,懒得再截图了)。虽然按比例来说,我们已经分类了80%,但是6万多还是很多了。

既然都判断为属于同一时间,即两边都可以匹配,那么我们就可以取一个词,在原程序中再次运行一下,看看两边匹配什么。

阑尾炎引流管每日引流量

这是一个与医疗技术相关的长尾词。程序运行后,这个长尾词的结果是:

正:流量

反:阑尾、阑尾炎、引流、引流管、引流量

这是长尾词在种子词中命中的词。显然,程序并没有错,因为词流量出现在与互联网推广相关的长尾词中是很正常的。

但这个词与医疗有关,我们还是希望它被判定为“反”。如何做到这一点?

我们还是需要用概率的思维,结合我们上面提到的相关性,来判断一个长尾词属于哪个领域,而且分词后的词很有可能属于那个领域。

因此,我们可以看到,这个长尾词中命中“反”的种子词数量远远超过了“正”词的数量。这意味着假的不可能是真的,真假的也不可能是真的,所以根据这个绝对差值,我们可以直接奖励给数量较大的一方。

优化程序判断后,结果为:

医疗是什么意思_医疗是什么工作_医疗seo是什么

分类结果

可以看到w2从1.9M减少到300+kb,而w3和w4都明显增加,因为更多的词被分类了。

医疗是什么工作_医疗seo是什么_医疗是什么意思

w2

可以看到w2中有超过10000个项目。有了这么多的数据,专门和Excel打交道的SEO或SEM人员经过几次重复操作就可以快速整理出来。

但其实如果你愿意的话,这个还是可以优化的。会出现这么多w2,很大一部分原因是准确分词的问题。如果有兴趣,可以自己研究一下优化方案。

关于w1没有提到的:

医疗是什么意思_医疗是什么工作_医疗seo是什么

w1

我特意把它剪得长一些,以便理解为什么这些词不属于任何一方。读完你就明白了。事实上,这些词已经超出了长尾词的范围。去掉“排水”,去掉没有倾向的词后,就基本没有词了。你可以做出判断。

这种词的结构非常简单。如果你确实需要的话,Excel 可以快速整理出来。

最后放上w3和w4的数据:

医疗是什么意思_医疗是什么工作_医疗seo是什么

网络推广相关

总共有15W+个长尾词,这就是我们需要的数据!

医疗是什么工作_医疗是什么意思_医疗seo是什么

医疗疾病相关

总共有30W+个长尾词,这是我们不需要的数据!

交流自动机

# pip install ahocorasick-python

import ahocorasick

t1 = time.time()
ac = ahocorasick.AhoCorasick(*seed_word)
t2 = time.time()
rw = []
print(t2-t1)
for word in keyword:
sw = ac.search(word)
for i in sw:
word = word.replace(i,
'***')
rw.append(word)
t3 = time.time()
print(t3-t2)

rw = []
t1 = time.time()
for word in keyword:
for i in seed_word:
if i in word:word = word.replace(i,'***')
rw.append(word)
t2 = time.time()
print(t2-t1)

我为交流自动机使用了第三方模块。该算法的效率相当不错。总共有5W个词汇,50W个目标文本。传统方法总共需要1450秒。使用AC自动机,构建需要20秒,但这是一次性的,判断加替换是100秒。

其实,无论是种子词关联的思想,还是AC自动机算法,一个不恰当的比喻就像是把线性问题转化为指数问题(这个表述可能有问题)。时间成本不会随着数据量的增加而增加。上升。

对于敏感词过滤等问题,还有其他解决方案,例如 DFA。解决方案没有标准,适合您的就可以。

结论

如何大量剔除不相似的长尾词,我在过去的公众号付费文章中也提供过解决方案,但是需要网络数据来做出支撑判断,而且这是完全本地化的,相对更经济。

这项工作的总时间一般不会超过半小时,得益于“利用种子词带出更多种子词”的思维、“基于概率确定归属”的逻辑以及“AC自动机算法”的高效,处理几十万和几百万在时间上不会有太大的差别。实际程序计算时间不到10分钟。

虽然我们绞尽脑汁,使用了很多策略来完成这样的任务,但第一次完成的时候我们可能会感到有点自豪。

但事实上,就价值而言,这是一个在外部沟通中甚至不值得谈论的工作项,因为它不是一个具体的成果指标。

在外人看来,这不就是你地位的基础吗?事实也确实如此。

另外,有的朋友可能会觉得,使用AC自动化算法相比普通的方法,几十万个单词的时间相差不大,并不比程序计算的几十分钟少。

这是正确的。整个过程没有标准的步骤或计划。我只是想传达一种工作方式。当你遇到很多棘手的问题时,你可以发散思维,改变观点。其实可以解决的思路有很多。 。

同时,对于技术朋友来说,与传统的方法相比,使用AC自动机只是几行代码,但好处还不止于此。多学习一门技术就可以解决很多类似的问题。 。

对于上面提到的采集项目,我使用AC自动机来处理不断新增的敏感词和文章。下一阶段,我将为这个采集项目做另一项工作:过滤目标字段中的内容。

并非目标集合源中的所有内容都一定是我们目标字段中的内容。可能有很多不相关的内容。当然,我们选择丢弃不相关的内容,不将其纳入数据库。

因此,我们需要设计一个简单的判断逻辑,类似于推荐算法给文章打标签的方式来判断当前内容是否属于目标领域。如果没有,则不会收集,这样会减少人工审核的工作量。这都是老板的金钱和人员成本。是最高的。

因此:我想,默默地啃这些难题,目前看来可能是一种损失,但在以后的工作中,一定会带来更多的“复利”。

PS:很多处理长尾词数据的朋友都告诉我,他们不知道如何清理。过段时间我会写一个通用的类似工具,放到公众号上。

谁是你心中最没有次元壁的 cosplay 明星?快来看看吧
« 上一篇 2024-11-09
日本网友票选:发型最奇葩的女性角色,你见过几个?
下一篇 » 2024-11-09

文章评论