質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Q&A

解決済

3回答

3841閲覧

大量のテキストデータから単語数を集計する方法

sdnco

総合スコア21

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

1グッド

1クリップ

投稿2016/08/22 14:04

現在、macのターミナル上でmecabに | cut -f 1 | sort | uniq -c | sort -r -n コマンドを使って1ファイル1行のテキストファイルの単語数をカウントをしています。1000ファイル結合した1000行のテキストファイルなら問題なくカウント出来ました。
しかし、10000行のような膨大な数で実行すると、argument list too long というエラーが起きてしまいます。
多くのテキストデータのカウントできるようにする良い方法は何か無いでしょうか?

ご教授お願い致します。

ターミナルのコマンドに関しては以下のURLのサイトを参考にしました。
http://ldl.ic.kanagawa-it.ac.jp/ioroi/programer/wordcount/wordcount.html

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matobaa

2016/08/22 15:07

10000行やそこらでへこたれるはずはない、と思うのですが。コマンド行そのまま質問に追記できますか? 途中に * とかが入ってるんじゃないかと思ってるのですけど
sdnco

2016/09/01 14:57

おっしゃる通りです。 質問した時点で使用していたコマンドにはワイルドカード(*)が入っていました。 以下がそのコマンドです。 cat ./test_log/$no/* 以上のコマンドのようにテキストファイルを結合する際に使用しました。 質問文に不足があり申し訳ありません。
guest

回答3

0

ベストアンサー

おそらく 10000 × ファイル名文字数 で文字数のオーバーエラーと考えられるので、なるべく右辺の文字数を少なくする方法で試してみては同でしょうか?cdしてディレクトリ名が含まない様にするとか、ファイル名で分割するとかです。

findでは

shell

1find . -type f | xargs cut -f 1 | sort | uniq -c | sort -r -n

投稿2016/08/23 01:42

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sdnco

2016/09/01 13:57

回答ありがとうございます。 質問した時点で使用していたコマンドにはワイルドカード(*)が入っていました。 質問文に不足があり申し訳ありません。 提示していただいたコマンドでは成功しました。 おっしゃる通りワイルドカード(*)の使用による文字数オーバーが原因と思われます。
sdnco

2016/09/01 14:06

以下のURLを参考にしました。 http://assimane.blog.so-net.ne.jp/2011-01-15 ところで、A.Ichiさんの回答にあった「なるべく右辺の文字数を少なくする方法」の"右辺"とは何のことを指しているのでしょうか?
A.Ichi

2016/09/01 15:15

xargs は、左辺(find)からの出力を次のコマンド(cut)に対してのパラメーターを並べて渡す機能ですのでフィル名が長く(ディレクトリが名を含む)×数が多いと言う意味でオーバーフローの原因になると思われます。わかりづらくてすみません。
guest

0

argument list too long
はコマンドライン上のパラメータが長すぎることを意味しています、
(大抵は * を展開した結果が長くなった時など)

参考情報

投稿2016/08/22 20:54

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

確認ですが

cd /hoge mecab * | cut -f 1 | sort | uniq -c | sort -r -n

みたいにしたらエラーが出るということでしょうか。
例えば

Sh

1#!/bin/sh 2tf='/tmp/text_file' 3rm -f $tf 4touch $tf 5cd /hoge 6ls -1 | \ 7while read f 8do 9 cat $f >>$tf 10done 11mecab $tf | cut -f 1 | sort | uniq -c | sort -r -n

って感じで、1ファイルに結合してから
実行してみてはどうでしょうか。

投稿2016/08/22 15:05

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問