SEO のための Python 教師なし単語抽出で単語をすばやく正確に分割する方法

SEO のための Python 教師なし単語抽出で単語をすばやく正確に分割する方法

単語をすばやく正確に分割する方法は、SEO のためのタグ集約と情報関連付けを抽出するのに役立ちます。

現在、多くの単語分割ツールはユニグラム単語分割に基づいており、語彙ライブラリの支援が必要です。

Google Blackboard の第 1 章の学習を通じて、単語の分割に統計モデルを使用する方法を学びました。

この方法は3次元を考慮している

凝集性: 2 つの単語が連続して出現する確率は、互いに独立していません。たとえば、「上」(shang)の出現確率は1×10^-5、「床」(bed)の出現確率は1×10^-10です。この2つの単語の結束度が低い場合、「上床」(shang bed)の出現確率は1×10^-15に近くなるはずです。しかし、実際には、「上床」(shang bed)の出現確率は1×10^-11であり、これはそれらの独立した確率の積よりもはるかに高いです。つまり、「getting laid」を単語として考えることができます。

左隣文字のエントロピー:区切られた単語の左側の文字の情報量。例えば、「巴掌」は基本的に「打掌」「一掌」「拍掌」にしか使えません。逆に、「过」という単語の前には「走过」「跑过」「爬过」「打过」「击过」「打过」「迷过」「睡过」「死过」「飞过」などが付くことがあり、情報エントロピーが非常に高くなります。

右隣接単語セットのエントロピー: 分離された単語の右側にある単語の情報量、上記と同じ

以下は Python で実装されたデモです (出典: http://www.webinfoextract.com/forum.php?mod=viewthread&tid=20) ?
1 2 3 4 5 6 7 8 9 #!/bin/sh python . /splitstr .py > substr.freq python . .py /cntfreq .py > word.freq python . /findwords .py > result sort -t " " -r -n -k 2 result > result. sort
splitstr.py は、10 文字未満の部分文字列を分割し、単語の頻度、左隣接単語セットのエントロピー、右隣接単語セットのエントロピーを計算し、10 回以上出現する部分文字列を出力します。 ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import math def compute_entropy(word_list): wdict = {} tot_cnt = 0 for w in word_list: if w not in wdict: wdict[w] = 0 wdict[w] + = 1 tot_cnt + = 1 ent = 0.0 for k,v in wdict.items(): p = 1.0 * v / tot_cnt ent - = p * math.log(p) return ent def count_substr_freq(): fp = open ( "./video.corpus" ) str_freq = {} str_left_word = {} str_right_word = {} tot_cnt = 0 for line in fp: line = line.strip( '\n' ) st = line.decode( 'utf-8' ) l = len (st) for i in range (l): for j in range (i + 1 ,l): if j - i 0 : left_word = st[i - 1 ] else : left_word = '^' j < l - 1 if : right_word = st[j + 1 ] else : right_word = '%' str_left_word[w].append(left_word) str_right_word[w].append(right_word) tot_cnt + = 1 str_freq.items(): for k,v in if v > = 10 : left_ent = compute_entropy(str_left_word[k]) right_ent = compute_entropy(str_right_word[k]) "%s\t%f\t%f\t%f" print : % (k,v * 1.0 / tot_cnt,left_ent,right_ent) __name__ = "__main__" if = count_substr_freq()
cntfreq.sh では、各単語の頻度をカウントします: ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 def count_freq(): word_freq = {} fp = open ( "./substr.freq" ) tot_cnt = 0.0 for line in fp: line = line.split( '\t' ) if len (line) < 2 : continue st = line[ 0 ].decode( 'utf-8' ) freq = float (line[ 1 ]) for w in st: if w not in word_freq: word_freq[w] = 0.0 word_freq[w] + = freq tot_cnt + = freq while True : try : x,y = word_freq.popitem() if x: freq = y * 1.0 / tot_cnt print "%s\t%f" % (x.encode( 'utf-8' ),freq) else : break except : break if __name__ = "__main__" = : count_freq()
findwords.py は、左と右の隣接単語セットの凝集度とエントロピーが高い文字列を出力します: ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 def load_dict(filename): dict = {} fp = open : (filename) for line in fp: line = line.strip( '\n' ) item = line.split( '\t' ) if len (item) = 2 = dict [item[ 0 ]] = float (item[ 1 ]) return dict def compute_prob( str , dict ): p = 1.0 for w in str : w = w.encode( 'utf-8' ) if w in dict : p * = dict [w] return p def is_ascii(s): return all ( ord (c) < 128 for c in s) def find_compact_substr( dict ): fp = open ( "./substr.freq" ) str_freq = {} for line in fp: line = line.decode( 'utf-8' ) items = line.split( '\t' ) len (items) < 4 if : continue substr = items[ 0 ] freq = float (items[ 1 ]) left_ent = float (items[ 2 ]) right_ent = float (items[ 3 ]) p = compute_prob(substr, dict ) freq_ratio = freq / p freq_ratio > 5.0 if left_ent > 2.5 and right_ent > 2.5 and len (substr) > = 2 and and is_ascii(substr): print "%s\t%f" % (substr.encode( 'utf-8' not ),freq) __name__ = "__main__" if = dict : = load_dict( './word.freq' ) find_compact_substr( dict )
30,000 本のビデオのタイトルから抽出された最も頻繁な 50 個の単語は次のとおりです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50视频0.000237轴承0.000184北京0.000150中国0.000134高清0.000109搞笑0.000101新闻0.000100上海0.000100美女0.000092演唱0.000085音乐0.000082 —— 0.000082第二0.000080少女0.000078最新0.000074广场0.000070世界0.000070现场0.000066娱乐0.000066大学0.000064公司0.000064舞蹈0.000063电视0.000063教学0.000060我们0.000060国语0.000059经典0.000056字幕0.000055宣传0.000053钢管0.000051游戏0.000050电影0.000049演唱会0.000046日本0.000045小学0.000045快乐0.000044超级0.000043第三0.000042宝宝0.000042学生0.000042广告0.000041培训0.000041视频0.000040美国0.000040爱情0.000039老师0.000038动画0.000038教程0.000037广州0.000037学院0.000035

元のタイトル: Python の教師なし単語抽出 SEO で単語をすばやく正確に分割する方法

キーワード: Python、教師なし、教師ありサンプリング、SEO、方法、迅速、正しく分割、ウェブマスター、ウェブサイト、ウェブサイトのプロモーション、収益化

<<:  ウェブサイトのデザイン分析:ユーザーの本来の習慣に基づいたデザイン

>>:  ウェブサイトのランキングを着実に上げるために合理的なウェブサイトの改訂を行う方法

推薦する

ブランドの若返り: 若者の間でブランドの人気を高めるにはどうすればよいでしょうか?

月給5,000~50,000のこれらのプロジェクトはあなたの将来ですブランドの若返りは、よく議論され...

タオバオオンラインストアが新しいメディアを活用して運営を支援する方法について簡単に説明します。

今は新メディア時代です。4つの伝統的なメディアの発展はインターネットの影響で疲労の兆候を見せており、...

AIコンピューティングパワーの封鎖が激化しています!米国、中国によるアマゾン、マイクロソフトのクラウドサービスの利用を制限する計画

ウォール・ストリート・ジャーナルは7月4日、米国政府が中国企業による米国メーカーのクラウドコンピュー...

SEO の一般的なプロモーション方法は何ですか?

一般的なSEOプロモーション手法という話題は、基本的には決まり文句ですが、その注目度は決して過小評価...

プロモーションに基づいたコンテンツの配信というビデオ業界の奇妙な市場行動

Youku のビデオ コンテンツの質はかなり良いので、私はずっと Youku を支持してきました。さ...

クラウドコンピューティングは多様化と総合的な発展の時代に入る

現在の企業 IT インフラストラクチャ技術の唯一の選択肢として、クラウド コンピューティングは探索と...

微博は前進の道を模索している

1995年以降に生まれたユーザーであるMiaomiaoさんは、最近のWeiboが少し変わったことに気...

財務省:「ライセンス」を発行せずにオンライン宝くじ販売を承認

[要約] 財務省は、インターネット企業が宝くじを販売するには財務省に申請する必要があると述べており、...

Baidu、Google、.CN、問題なし

.cn の 1 元ブームが始まって以来、.cn は市場ですぐに人気商品となり、多くの SEO 担当者...

クラウド変革戦略を成功させる方法

IT企業ユニシスの調査によると、組織の大部分はまだクラウド移行から大きな利益を得ていない。クラウドへ...

Podmanとは何ですか? Dockerとの違いは何ですか?

コンテナ オーケストレーション ツールは、今日最も重要な Web 開発テクノロジーの 1 つとして、...

SaaSアプリケーションの開発方法

【51CTO.com クイック翻訳】ご存知のとおり、Software as a Service (S...

クラウド移行はますます困難になる

現在、多くの企業が単純なものを移行しているため、時間の経過とともに困難になってきていますが、それでも...

百度、集約ページに対抗するため金鋒アルゴリズムを導入

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス百度は昨夜、公式アカウン...

ローカルウェブサイト間の競争と反競争的戦術

競争相手間の話題については話したくなかった。双方が文章や口頭で互いを批判し合っており、傍観者の方がは...