ウェブ上のコンテンツをそのまま自サイトに掲載すれば無断転載。当然やってはいけません。他のサイトに書かれていることは参考するにとどめて自分で文章を書きましょう。またリライト(書き換えた)つもりだったのに実は気がつかないうちにコピーしていた・・・なんてこともあります。
そこでコピペコンテンツを摘発するアプリを作ってみることにします。
一文が完全に一致していた。これ、うっかりやってしまうことが多いいんですよ。悪気はなかったとしてもやっぱりアウトです。見逃してはくれません。
元の文章と新しく作成した文章で一文まるごと同じになっている部分をみつける方法はないのでしょうか?
文は「。」で終わるので文章を「。」で区切る。そして元の文章の中に同じものがないか調べます。
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 |
public partial class Form1 : Form { private void button1_Click(object sender, EventArgs e) { List<string> vs = SearchCopySentence(richTextBox1.Text, richTextBox2.Text); if(vs.Count == 0) { MessageBox.Show("コピペされた文は見つかりませんでした。"); } else { int count = vs.Count; string str = String.Format("コピペされた文が{0}件見つかりました。", count); MessageBox.Show(str, "", MessageBoxButtons.YesNo); } } List<string> SearchCopySentence(string oldText, string newText) { string[] split = new string[] { "\n", "。" }; string[] oldSentences = oldText.Split(split, StringSplitOptions.RemoveEmptyEntries); string[] newSentences = newText.Split(split, StringSplitOptions.RemoveEmptyEntries); return newSentences.Intersect(oldSentences).ToList(); } } |
これでは実際には役にたちません。
元の文章
ウェブ上のコンテンツをそのまま自サイトに掲載すれば無断転載。当然やってはいけません。他のサイトに書かれていることは参考するにとどめて自分で文章を書きましょう。またリライト(書き換えた)つもりだったのに実は気がつかないうちにコピーしていた・・・なんてこともあります。
書き換えた文章
ウェブ上のコンテンツをそのまま自サイトに掲載すれば無断転載だよ。当然やってはいけませんよ。他のサイトに書かれていることは参考するにとどめて自分で文章を書くようにしましょう。またリライト(書き換えた)つもりだったのに実は気がつかないうちにコピーしていた……なんてこともあります。
両者は語尾を変えただけで、あとはまったく同じ文章です。こんな方法でコピペチェックをすり抜けられては困ります。
そこでどうするか?
トライグラム(3-gram) を使って文の類似度を調べるというのはどうでしょうか?
となりあった3個の文字の並びを取り出します。
「ウェブ上のコンテンツをそのまま自サイトに掲載すれば無断転載です」
であれば
ウェブ
ェブ上
ブ上の
上のコ
のコン
コンテ
ンテン
テンツ
ンツを
ツをそ
をその
そのま
のまま
まま自
ま自サ
自サイ
サイト
イトに
トに掲
に掲載
掲載す
載すれ
すれば
れば無
ば無断
無断転
断転載
転載で
載です
このように元の文章と書き換えた文章を比較して、同じ部分が多ければコピペで作られた文章と判断するのです。
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 |
public partial class Form1 : Form { List<string> GetTrigrams(string str) { int len = str.Length; List<string> trigrams = new List<string>(); for(int i=0; i< len-2; i++) trigrams.Add(str.Substring(i, 3)); return trigrams; } float SimilarRateFromTrigram(string oldText, string newText) { List<string> oldTrigrams = GetTrigrams(oldText); List<string> newTrigrams = GetTrigrams(newText); // oldTrigramsにあるものはnewTrigramsから取り除く int intersectTrigramsCount = newTrigrams.Except(oldTrigrams).ToList().Count; int newTrigramsCount = newTrigrams.Count; // 残ったnewTrigramsの要素数が独自性。100%からこれを引いたものが類似率 return 100 - 100 * intersectTrigramsCount/ newTrigramsCount; } private void button2_Click(object sender, EventArgs e) { float s = SimilarRateFromTrigram(richTextBox1.Text, richTextBox2.Text); MessageBox.Show(s.ToString(), "", MessageBoxButtons.YesNo); } } |
この方法だとコピペ率87%という厳しい数値(というより適正な数値)が出ます。
インチキ記事作成のなかに「単語の順番を入れ替える」というのがあります。
元の文章
ウェブ上のコンテンツをそのまま自サイトに掲載すれば無断転載。当然やってはいけません。他のサイトに書かれていることは参考するにとどめて自分で文章を書きましょう。またリライト(書き換えた)つもりだったのに実は気がつかないうちにコピーしていた・・・なんてこともあります。
書き換えた文章
自分で文章を書きましょう。他のサイトは参考するにとどめましょう。ウェブ上のコンテンツを自サイトにそのまま掲載すれば無断転載です。当然やってはいけません。また実は気がつかないうちにコピーしていた・・・なんてこともあります。リライト(書き換えた)つもりだったのに。
この場合はコピペ率は83%になりました。単語の順番を入れ替えるだけでは見逃してくれないようです。
ではこれならどうか?
文章を自分で書くのは面倒ですよね。だからといってウェブ上に掲載されている文章をそのままパクって自分のサイトに掲載するのは絶対にダメ。著作権法違反で処罰されるかもしれません。ネタになるものがない場合、他のサイトに書かれていることを参考するのはいいのですが、文章は自分で考えてかきましょう。きちんとリライトしたつもりでも、文章を編集しているあいだに元の文章と同じになってしまうことがあります。気がつかなかったでは良いわけになりません。最低限、コピペチェックはやっておきましょう。
これならコピペ率26%まで下がりました。