Ruby NLP:楽しさと利益のためのNグラム分析
大量のテキストのコレクションが与えられ、そこから何らかの意味を抽出したい場合はどうしますか?
良いスタートは、テキストをn-gramsに分割することです。 。
ここに説明があります :
計算言語学と確率の分野では、n-gramは、テキストの特定のシーケンスからのn個のアイテムの連続したシーケンスです。 –ウィキペディア
例 :
「こんにちは、お元気ですか?」というフレーズをとると、その場合、ユニグラム(1つの要素のngram)は次のようになります:"Hello", "there", "how", "are", "you"
、およびバイグラム(2つの要素のngram):["Hello", "there"], ["there", "how"], ["how", "are"], ["are", "you"]
。
あなたが画像でよりよく学ぶならば、ここにその写真があります:
では、これをRubyで実装する方法を見てみましょう!
サンプルデータのダウンロード
手を汚す前に、いくつかのサンプルデータが必要になります。
作業するものがない場合は、ウィキペディアまたはブログの記事をいくつかダウンロードできます。この特定のケースでは、#rubyfreenodeのチャネルからいくつかのIRCログをダウンロードすることにしました。
ログはここにあります :
irclog.whitequark.org/ruby
データ形式に関する注意 :
分析するリソースのプレーンテキストバージョンが利用できない場合は、Nokogiriを使用してページを解析し、データを抽出できます。
.txt
を追加すると、ircログをプレーンテキストで利用できます。 URLの最後にあるので、それを利用します。
このクラスは、データをダウンロードして保存します:
require 'restclient' class LogParser LOG_DIR = 'irc_logs' def initialize(date) @date = date @log_name = "#{LOG_DIR}/irc-log-#{@date}.txt" end def download_page(url) return log_contents if File.exist? @log_name RestClient.get(url).body end def save_page(page) File.open(@log_name, "w+") { |f| f.puts page } end def log_contents File.readlines(@log_name).join end def get_messages page = download_page("https://irclog.whitequark.org/ruby/#{@date}.txt") save_page(page) page end end log = LogParser.new("2015-04-15") msg = log.get_messages
これは非常に単純なクラスです。
RestClientをHTTPクライアントとして使用し、結果をファイルに保存するので、プログラムに変更を加えるときに何度もリクエストする必要がありません。
データの分析
データができたので、分析できます。
これが単純なNgramクラスです。
このクラスでは、ngramを生成するArray#each_consメソッドを使用します。
このメソッドはEnumerator
を返すためです to_aを呼び出す必要があります その上にArray
を取得します 。
class Ngram def initialize(input) @input = input end def ngrams(n) @input.split.each_cons(n).to_a end end
次に、ループHash#merge!
を使用してすべてをまとめます。 &Enumerable#sort_by
。
このように :
# Filter words that appear less times than this MIN_REPETITIONS = 20 total = {} # Get the logs for the first 15 days of the month and return the bigrams (1..15).each do |n| day = '%02d' % [n] total.merge!(get_trigrams_for_date "2015-04-#{day}") { |k, old, new| old + new } end # Sort in descending order total = total.sort_by { |k, v| -v }.reject { |k, v| v < MIN_REPETITIONS } total.each { |k, v| puts "#{v} => #{k}" }
注:
get_trigrams_for_date
メソッドは簡潔にするためにここにはありませんが、githubで見つけることができます。
出力は次のようになります :
112 => i want to 83 => link for more 82 => is there a 71 => you want to 66 => i don't know 66 => i have a 65 => i need to
ご覧のとおり、#ruby🙂
では物事をやりたいことが非常に人気があります結論
今度はあなたの番です!
エディターを開いて、n-gram分析を試してみてください。 n-gramの動作を確認するもう1つの方法は、GoogleNgramViewerです。
自然言語処理(NLP)は魅力的なテーマになる可能性があり、ウィキペディアにはトピックの概要が記載されています。
この投稿の完全なコードは、https://github.com/matugm/ngram-analysis/blob/master/irc_histogram.rb
にあります。-
Excel で分析用のデータを入力する方法 (2 つの簡単な方法)
どのビジネスにおいても、データを分析してビジネスの状態を評価することは非常に緊急です。リスクを特定し、損失を減らすための適切な措置を講じるのに役立ちます。 Excelでは、いくつかの方法を使用して簡単に行うことができます。今日のこの記事では、シャープな方法と鮮やかなイラストを使用して、Excel にデータを入力して分析するための 2 つの簡単な方法を紹介します。 ここから無料の Excel ワークブックをダウンロードして、個別に練習できます。 分析用データを入力する 2 つの方法 エクセル メソッドを調べるために使用するデータセットを紹介しましょう。これは、さまざまな地域での年間売上高と
-
データ分析のための 5 つの驚くほど実用的なツール
データは、私たちが想像もできなかった速度と寛大さで継続的に出現しています。データは石油よりも価値があると言われていますが、データがあなたの車を動かせないことはわかっています。それにもかかわらず、機密の財務情報やビジネス情報が含まれているため、データは企業や業界の大御所にとって最大の商品となっています.このデータを構造化された形式で管理および操作するには、データ分析ツールが不可欠です。 データ分析は、アナリストがレコードや構造化された形式でデータを維持するのに役立つ予測モデリング アルゴリズムで動作します。分析は、コスト削減だけでなく、より適切で迅速な意思決定にも重要です。したがって、ここでは