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、方法、迅速、正しく分割、ウェブマスター、ウェブサイト、ウェブサイトのプロモーション、収益化

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

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

推薦する

電子商取引の背後にある価格戦争:今年20人以上の業界幹部が辞任

前回の急成長の後、2012年の電子商取引業界は「大魚が小魚を食べ、速い魚が遅い魚を蹴る」という統合の...

bacloud-5.8 USD/KVM/2 GB RAM/20 GB HDD/無制限トラフィック/リトアニア

トラフィック無制限のリトアニアの VPS を皆様にお勧めしたいと思います。この業者は bacloud...

AI がエッジ コンピューティングと IoT をよりスマートにする方法

[[391125]]エッジで AI を導入すると、ネットワークの遅延と運用コストが削減されるだけでな...

SmartVPS (香港) シンプルレビュー

午後、私が仕事中だったとき、smartvps の社員を名乗る人物が QQ で私を追加し、彼らの VP...

Baidu の新しい K-station モデルの簡単な分析

典型的な「6.28Kステーション事件」の後、Kステーションの過剰がウェブマスターの衝動的な感情を引き...

2020年上半期のクラウド運用サービス市場規模は100.8億元

12月23日、国際データコーポレーション(IDC)がこのほど発表した「中国クラウド運用サービス市場(...

henghost: 国慶節 50% オフ プロモーション - 香港 CN2 サーバー + 香港高防御サーバー + 香港クラウド サーバー (OpenStack)

恒創科技は、国慶節期間中(10月12日まで)に「国慶節セール」を実施します。香港CN2サーバー、香港...

新しいウェブマスターが必ず読むべきウェブサイト降格レベルの分析

ウェブマスターにとって、ウェブサイトはもう一人の自分のようなものです。多くのウェブマスターが同じこと...

お金を優先する戦略が必ずしもウェブサイト運営の成功につながるわけではないという事実を簡単に分析する

多くの人が「お金は悪魔を働かせる」と聞いたことがあり、中には「お金は悪魔を働かせる」と聞いたことがあ...

vpsao - ロサンゼルス VPS 年間支払いはわずか 5 ドル、WeChat と Alipay の支払いをサポート

最近、新しい業者であるvpsaoから2通のメールを受け取りました(これまでvpsaoに注目したことは...

BingはGoogleの有料ランキングが公平性に影響を与えていると再び批判

つい最近、マイクロソフトの Bing チームは、Google に打撃を与え、Bing を「最もホット...

AWS 対 Azure 対 Google: クラウド コンピューティングの選択肢として最適なのはどれでしょうか?

今日のインターネットは成長と発展を続けており、人々の日常のコミュニケーションをほぼ完全に担っています...