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

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

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

推薦する

ウェブサイトのユーザー エクスペリエンス分析: ページ ナビゲーションの原則

有名なグリム童話では、ヘンゼルとグレーテルは継母が自分たちを深い森で迷わせようとしていることを知って...

小米の飢餓マーケティングは費用対​​効果の排除に課題に直面

記者の陳立栄店舗を持たずインターネットのみで販売しているXiaomiの携帯電話販売台数は、2年間で0...

ロボットは検索スパイダーのクローリングとグラブを完全にブロックできますか?

検索スパイダーのクロールをブロックする場合、当然 robots.txt ドキュメントが思い浮かびます...

情報サイト開発のポイントを分析

情報共有のスピードが速まるにつれ、ニュース情報サイト、健康・ウェルネス情報サイト、総合情報サイトなど...

Canalys: 世界のクラウドコンピューティング支出は418億ドルに達する

市場調査会社カナリスは最近、企業がパンデミックを乗り切るためにインターネットに大きく依存したため、ク...

県の人材ネットワークはどのようにして月収10,000元以上を達成できるのでしょうか?

私はインターネットと関わり始めて3年、人材ネットワークを3年間運営してきました。何もないところから何...

開発者はクラウド プラットフォームに関してどのような準備を行う必要がありますか?

CTO、CEO、CDOの積極的な推進により、ITインフラはクラウド環境に移行しつつあります。基盤とな...

HyperExpert - シアトルの格安 VPS / 3.99 ドル / KVM / 2G RAM / 20g ハード ドライブ / 無制限トラフィック

HyperExpert は、ホスティング業界のハイテク大手数社によって 2009 年に設立されました...

Woothosting - 19 USD/年/200GB ハードドライブ/無制限の再販ホスティング

Woothosting は、サブアカウント、サブ配布アカウントの無制限の開設をサポートし、PHP バ...

インベントリ | 2018 年の主要な情報フロー チャネルの特徴

今年に入ってから、ビリビリ、網易雲音楽、左葉坊、快手、抖音などのスーパーアプリが相次いで情報フロー広...

#改訂# ramnode-全面値下げ/構成アップグレード/コストパフォーマンス大幅向上

ramnodeはついに安定性を失い始めました。linode\vultr\などのプラットフォームが価格...

3月、IDCのブランド注目度指数の上位10ブランドである中国HiChinaの成長率は2,000近くに達した。

IDC Review Network (idcps.com) は4月1日に次のように報じました。ID...

ゼロから始める教育:アプリ初リリーススキル+オムニチャネル

優れた製品アプリを作るのは簡単ではありませんが、優れたアプリをリリースするのはさらに困難です。大量に...

米国のフラッシュセールサイトFabが1億5000万ドルの資金を調達、テンセントも投資に参加

新浪科技報、北京時間6月19日正午のニュースによると、米国のフラッシュセールサイトFabは火曜日、シ...