ソート中です。フランス国民一部のテキストファイルの言語単語は、次のものに基づいています。頻度集中する洞察力統計的な意味ではなく、問題はアクセント付きの文字を保存して処理することです。記事形式順序のための単語マーカーの形成の文脈で、コレクション(l'
、)の前に来ます。d'
テーマは最も頻繁ファイル内の単語はさまざまな形式で表示されます(1|2|サム|4)。だから私はこの機能を使って組み合わせます。牛に似た一種の栄養便利:
compt1 () {
for i in *.txt; do
echo "File: $i"
sed -e 's/ /\
/g' <"$i" | sed -e 's/^[[:alpha:]][[:punct:]]\(.*\)/\1/' | sed -e 's/\(.*\)/\L\1/' | grep -hEo "[[:alnum:]_'-]+" | grep -Fvwf /path_to_stop_words_file | sort | uniq -c | sort -rn
done
}
...行の先頭から1文字を切り取り、すべてを小文字に変換します。この単純なgrep
構造を使用して単語構成文字を一致させ、停止単語を削除します。最後に一般的なソートです。これファイルの停止個々のキャラクターを含む部分が含まれているので注意が必要ですが、生成方法に関する情報を提供します。茎様々な言語の言葉が本当に楽しいです!
grep -c
さて、重要な単語の頻度をファイルに直接出力するのと比較すると、特定の誤差範囲内で十分に近いと思います。
質問:
- 複数の頻度を単数形(つまり、共通の接頭辞と他の1文字の接尾辞を共有する単語)とマージするにはどうすればよいですか?
grep
この部分が大丈夫かどうかを評価しようとしています。働く何が起こったのかOSX?
1. 元のデータを提供することはできませんが、提供することはできます。これファイルを例に挙げましょう。もし時間そして幼児本文に例を示します。前者はテキストに2回表示されます(一度は「l'heure」)。これはコマンドが有効であることを確認するのに役立ちます。後者は単数形と複数形で表示されます(幼児/幼児)ここに統合すると利益を得ることができます。
答え1
単純なスクリプトではsed
これを行うことはできません。私は「引用形式」に単純化し、すべての屈折を基本形式に縮小したいとします。
これは、次の形容詞を意味します。弟子、弟子、弟子、弟子すべて同じもの、基本形容詞/噴射とみなされます。弟子。同様に、動詞のすべての活用型保護者- 良いprotége, protégeons, protégeais, protégeasse, protégeâmes, protégeront, protégeraientなど - 基本動詞に縮小されます。
これは、言語の屈折形態を理解する必要があることを意味します。さらに悪いことは、活用や同型異義語の区別など、言語の実際の文法について知る必要があるということです。
私は終わった。非常に少なくともPerlを使って最初の部分を実装する簡単な方法があります。これは本当に非常に痛みを伴うものです。以下は、イベリア半島の都市のソートキーを生成するために使用するコードの例です。
#主な記事1 s/^L'//; #カタロニア語 s{^ (?: #カスティーリャ エルザ |ロス |引く |ラス #カタロニア語 |エルス |レス |会社 |エース #ガレゴ |酸素 |オペレーティングシステム |A |へ ) \s+ } {} X; #2番目の内部粒子 s/\b[dl]'//g # カタロニア語 S { \雨 (?: el|los|la|ras|de|削除|はい |els|les|i|sa|es|#CA を削除 |ああ|os|a|as|do|da|os|das #GAL ) \雨 {} gx;
これにより、アイテムとパーティクルが削除され、分類目的で計算されなくなります。ただし、次の表を処理する必要があります。オテル実際、U + 2019の右側の一重引用符、いわゆる丸い引用符を使用すると、好ましいアポストロフィの形です。まずdirectに正規化しますs/’/'/g
。
ああ、そしてエンコードの問題も処理する必要があります。 MacRomanはUTF-8やISO-8859-1と同じではありません。近いこともありません。
正直に言えば、Snowball 形態素解析などの機能を使用して、フランス語を言語で指定したい場合があります。もちろん、PerlのLingua::Stem::Snowball
モジュールはこれを行う方法を知っています。次のコマンドを使用すると、フランス語学に関連するPerlモジュールを検索できます。このクエリ。
しかし、茎はこれまでだけあなたを連れて行くことができます。形態分析分析を適用しないと、実際には良いことはできません。つまり、文の構文解析を生成し、文の各要素に品詞を割り当てる必要があることを意味します。
これにはより多くの作業が必要です。良いニュースは、これを行うための専門的なツールがあり、そのいくつかはフランス語で動作することです。しかし、これは自然言語処理と計算言語学に触れることになるので、これは重要です。このような質問をするのに良い場所はありませんが、Lingustics.SEでより良い答えを得ることができるかどうかはわかりません。
答え2
自然言語処理は複雑です。例を実行するには、正規表現を使用してください。正規表現でHTMLを解析するのと同じです。、状況はさらに悪化します。読むキリストの優れた答えいくつかの洞察を使って問題を解決する方法を学びます。 UNIXテキスト処理ツールの移植性に関する部分について簡単に回答します。
すべての現代のUNIXシリーズシステムの共通点は次のとおりです。POSIX仕様。最も有用なリソースは次のとおりです。公開グループ仕様問題6POSIXを含め、拡張し、便利にオンライン(例:ダーバン)。非埋め込みLinux(およびCygwin)とOSXの移植性にのみ興味がある場合は、次の点を確認してください。GNUマニュアルそしてOSX マニュアルページ。
POSIXではなく複数のオプションを使用していますが、grep
どちらもGNUとOSXで利用できます(OSXはほとんどのGNU構造をエミュレートするように設計されたFreeBSDのgrepを使用します)。 POSIXが必要な場合は避けるべきいくつかのオプションがあります。
grep -h
ファイル名の抑制:grep
一度に1つのファイルを呼び出すか、ファイルをcat
最初のファイルに渡します。grep -o
一致する部分のみ出力:使用sed
あるいはawk
その逆も。grep -w
フルワードのみ一致:類似パターンを検索します(^|[^[:alnum:]])needle($|[^[:alnum:]])
。
sedでGNUのみの設定を使用しています。これは\L
command で置換項目を小文字にするディレクティブですs
。他のsed実装には同様の状況はありません。通常、awkを代わりに使用できます。入力を分割して、置き換えて呼び出す文字列を分割しますtolower
。入力全体を小文字に置き換えるには、を呼び出しますtr '[:upper:]' '[:lower:]'
。
答え3
これ選択した回答現場の課題の本当に良い紹介です。自然言語処理そして計算言語学そして確かにより多くの情報があります。専用SE資産。私はこれらの課題を強調し、一時的な「解決策」を提供する付録を提供したいと思います。
場合によってはかなり安全ですが、興味深い結果を得るために最後の部分を整えることができると思います。s
sed
s/\(.*[bcdefghjklmnpqrtvwxyzéëêàâûùôö]\)s$/\1/
これは一部を圧縮します。50行元の機能と一緒に使用したときに提供された例では。
だから私はsed
次のすべてを試しました。不完全そして期待どおりに機能しない- しかし、難しさを示し、私の考えは答えの説明を理解するのに役立ちます。
sed '
h;
s/^\(par\|col\|tap.*\)/\1/
t RVv
h;
s/^\(par\|col\|tap.*\)/\1/
t RVc
h;
s/^\([aeiouyâàëéêèïîôûù][aeiouyâàëéêèïîôûù]..*\)$/\1/
t RVnotpctv_v
h;
s/^\(.*.[aeiouyâàëéêèïîôûù]....*\)/\1/
t RVnotpctother
b
:RVv
s/^\(par\|col\|tap[bcdfghjklmnpqrstvwxz][aeiouyâàëéêèïîôûù].*\)/\1/
t R1
:RVc
s/^\(par\|col\|tap[aeiouyâàëéêèïîôûù][bcdfghjklmnpqrstvwxz].*\)/\1/
t R1
:RVnotpctv_v
s/^\([aeiouyâàëéêèïîôûù][aeiouyâàëéêèïîôûù].[aeiouyâàëéêèïîôûù][bcdfghjklmnpqrstvwxz].*\)$/\1/
t R1
:RVnotpctother
s/^\(.*[aeiouyâàëéêèïîôûù][bcdfghjklmnpqrstvwxz].*\)/\1/
t R1
:R1
s/ement$\|ements$\|ité$\|ités$\|if$\|ive$\|ifs$\|ives$\|euse$\|euses$//
s/é$\|ée$\|ées$\|és$\|èrent$\|er$\|era$\|erai$\|eraIent$\|erais$\|erait$\|eras$\|erez$\|eriez$\|erions$\|erons$\|eront$\|ez$\|iez$\|ions$\|eons$//
s/eâmes$\|eât$\|eâtes$\|ea$\|eai$\|eaIent$\|eais$\|eait$\|eant$\|eante$\|eantes$\|eants$\|eas$\|easse$\|eassent$\|easses$\|eassiez$\|eassions$//
s/âmes$\|ât$\|âtes$\|a$\|ai$\|aIent$\|ais$\|ait$\|ant$\|ante$\|antes$\|ants$\|as$\|asse$\|assent$\|asses$\|assiez$\|assions$//
s/[bcdfghjklmnpqrstvwxz]îmes$\|ît$\|îtes$\|i$\|ie$\|ies$\|ir$\|ira$\|irai$\|iraIent$\|irais$\|irait$\|iras$\|irent$\|irez$\|iriez$\|irions$\|irons$\|iront$\|is$\|issaIent$\|issais$\|issait$\|issant$\|issante$\|issantes$\|issants$\|isse$\|issent$\|isses$\|issez$\|issiez$\|issions$\|issons$\|it$//
s/Y/i/
s/ç/c/
t R2
:R2
s/ance$\|iqUe$\|isme$\|able$\|iste$\|eux$\|ances$\|iqUes$\|ismes$\|ables$\|istes$//
s/atrice$\|ateur$\|ation$\|atrices$\|ateurs$\|ations$//
s/logie$\|logies$/log/
s/usion$\|ution$\|usions$\|utions$/u/
t Res
:Res
##Residual
s/ier$\|ière$\|Ier$\|Ière$/i/
s/\(.*[bcdefghjklmnpqrtvwxyzéëêàâûùôö]\)s$/\1/
##Undouble
s/\(en\)n$/\1/
s/\(on\)n$/\1/
s/\(et\)t$/\1/
s/\(el\)l$/\1/
s/\(eil\)l$/\1/
##Unaccent
s/\(.*\)\(é\)\([bcdefghjklmnpqrtvwxyzéëêàâûùôö]*\)$/\1e\3/
s/\(.*\)\(è\)\([bcdefghjklmnpqrtvwxyzéëêàâûùôö]*\)$/\1e\3/
s/\(.*\)e$/\1/
t
'
場合によっては、特定の語幹まで単語を正常に削除しますが、ほんの数文字しか含まない単語処理を避けるための非常に意識的な選択肢があります。一部小さな関数(代わりにR2例えば)そしてそれについてひどいことをします。ただし、前の式が含まれているため、サンプルから50〜60行をさらに圧縮しますsed
。2さらに理解するために勉強します。言語学!
1.これはすべて擬似コードに対する私の「理解」に基づいています。説明する~のスノーボールフランスのアルゴリズム。
2. 多くの場合間違っていますが、オンラインでインタラクティブに実行すると、次のような単語を見たときに探していた洞察を得ることができました。パロン待つキャンディ。なぜ最初の(動詞)は奪われons
なければならず、もう一つ(名詞)は奪われるしかないのかを決める本質的なものがこの二つの単語にないことに気づきましたs
。それについてスピーチの一部を分析する説明通り...