C'est la procédure jusqu'au point où vous essayez d'effectuer une analyse morphologique en utilisant Ruby (mecab gem) sur Ubuntu (bionic).
Première installation.
apt install mecab mecab-ipadic-utf8 libmecab-dev
gem install mecab
Vous pouvez essayer de sortir le résultat de l'analyse avec le programme suivant.
require 'mecab'
tagger = MeCab::Tagger.new
puts tagger.parse(open('sample.txt').read)
Il s'agit d'un exemple qui analyse la chaîne de résultat de sortie (String) et l'affiche dans l'ordre du nombre de fois où le mot apparaît.
require 'mecab'
tagger = MeCab::Tagger.new
t = tagger.parse(open('sample.txt').read)
words = {}
t.split("\n").each do |l|
w = l.split("\t")[0]
c = words[w] || 0
c += 1
words[w] = c
end
words.sort {|a,b| a[1] <=> b[1]}.each do |v|
puts v[0]+"\t"+v[1].to_s
end
Dans cet exemple, les mots de partie ne sont pas pris en compte, donc ",. (Ponctuation)" etc. sont également inclus. Je pense que le filtrage, etc. est nécessaire selon le but.
Il semble y avoir un joyau appelé natto, et il peut être judicieux d'utiliser ces pouvoirs. De plus, si vous souhaitez essayer facilement des méthodes d'analyse plus spécialisées, ou si vous souhaitez visualiser (graphe), un logiciel gratuit appelé KH Coder peut être utile ( Il semble que MeCab soit toujours utilisé en interne).
--Référence: J'ai essayé d'utiliser mecab
Addendum (20.06.13) J'ai essayé d'améliorer le code selon les conseils donnés dans la section commentaires. La version de Ruby incluse dans le standard d'Ubuntu (bionic-beaver) était 2.5.1p57
, donc c'est une forme autre que tally.
require 'mecab'
tagger = MeCab::Tagger.new
t = tagger.parse(IO.read('sample.txt'))
words = Hash.new(0)
t.split("\n").each do |l|
w = l.split("\t")[0]
words[w] += 1
end
words.sort_by {|a| a[1]}.each do |w,f|
puts "%4d %s" % [f,w]
end
Recommended Posts