中国語入力で「Body seems unclear」エラーが発生

Hi,

It seems that Discourse has some trouble dealing with Chinese characters. Our users cannot submit topics/posts if they use in chinese? In this case, I can see that it’s a long message but we still get the “Body seems unclear” message.

Any idea?

I see what is happening here.

We automatically disable this on Chinese forums but your forum appears to be English with a Chinese category.

Just set body min entropy to 0 in site settings.

Hum. Correction. It seems setting the body min entropy to 0 did not fix the issue. I tried with another text in Chinese and I still get the same error even though the body min entropy is set to 0

image

image

Did i miss something?

Hi,

Following up on this issue. I’m running some test with the latest version of discourse.

Body min entropy is set to 0. Same for Title min entropy.

When trying to create a topic with the body below I get the “Body unclear” error:

【澳門日報5月29日消息】國際會議協會(ICCA)日前發佈《二○一七年國際協會會議市場年度報告》。當中澳門多項評比的排位連續兩年均有上升,其中全球城市排名由一六年的七十二名躍升至第六十五名;亞太區域城市排名升一位至第十六,排名超過瑞士的日內瓦、澳大利亞的布里斯班、阿拉伯聯合酋長國的迪拜、韓國的釜山和濟州等城市

Is there a quick work around on this? My Chinese users are getting nervous because of this issue.

Thx
Seb

I’ve clarified this issue. But newbie is only able to put single picture on a post. So just a evidence and conclusion.

Conclusion, for both title and body

  • Validated: English capital letter ONLY
  • Validated: English capital letter AND (Chinese letter OR Japanese letter)
  • Succeeded: Chinese letter AND Japanese letter
  • Succeeded: English small letter AND (English Capital letter OR Chinese letter OR Japanese letter)

このスレッドを掘り起こして申し訳ありませんが、当フォーラムでも同様の問題に直面しています。当フォーラムは主に英語ですが、他の文字体系のセクションもいくつかあります。「body min entropy」を0に設定してもこの問題は解決しませんでした。

どうやら、一部のラテン文字の使用が「すべて大文字」チェックを誤作動させているようです。以下は、「本文が不明瞭です」という通知に引っかかったメッセージの例です:

我看了一下,我8/15寄往俄罗斯的明信片10/13对方收到了,但是10/27寄的对方还没收到,现在已经36天了(不过同一批寄往不同国家的也没被收到)。
因为我是直接投的邮筒所以也不太清楚是不是寄不过去… 如果你在UCPC微信群里也许可以问下大家?

ここで「大文字投稿を許可する」設定が唯一の解決策なのでしょうか?英語がメインの当フォーラムのような場合、その設定を有効にするのは望ましくありません。しかし、ユーザーが自身の文字体系で正当なメッセージを入力した際にそのエラーに直面する不満も理解できます。本文のサイズに対する大文字の比率をチェックすることで解決できないでしょうか?

それがまさにその機能です。あなたの例では、その比率は 100% です。

フォーラムのデフォルト言語が中国語に設定されている場合、これらの設定は自動的に調整されますが、単一のインスタンス内に複数の言語が混在している場合は、その設定を手動で調整する必要があります。

テキストに大文字・小文字の区別がない単一文字の文字(中国語など)が含まれている場合、そのテキストは自動的に「すべて大文字」とはみなされません。これは、/\p{Lo}/ に一致するかを こちら で確認することで実現できます。

このアプローチであれば、主に中国語・韓国語・日本語で利用されるフォーラムに対して特別な設定変更を必要とせず、また複数言語が混在するフォーラムでも適切に機能します。大文字に変換可能な文字のみが使用されている場合にのみ allow upper case を適用するようになります。

同様のロジックを、既存の「すべて大文字」チェックの最適化にも適用できるかもしれません。テキストが /\p{Ll}/(大文字の形を持つ小文字の文字)に一致する場合、そのテキストは「すべて大文字」ではないと判断できます。

プルリクエストとして素晴らしいアイデアですね!

Rubyのスキルはほぼ皆無ですが、範囲が比較的限定されているので、何かしら作成してみようと思います。

その上で、そのファイルの先頭にこのコードの行と関連していそうなTODOがあるのを見つけました。単にrequireを削除するだけで済むのでしょうか、それとも内容を理解している人がこのPRに取り組むべきでしょうか?

FIX: Allow all caps within CJK text by mentalstring · Pull Request #27900 · discourse/discourse · GitHub で試してみました。

まだ Ruby 開発者には程遠いので、ご容赦ください。:sweat_smile:

@mentalstringさん、ありがとうございます。あなたのPRを参考に、以下のPRを作成しました。

これには、パフォーマンスの向上や、ラテン文字以外のロケール処理の改善も含まれています :+1:

@lindsey さんにもCC)

素晴らしいですね!:+1: 私たちは国際フォーラムを運営しており、英語が主な言語ですが、他の言語専用のカテゴリもあり、これは長年の悩みの種でした。

skipped_localeseems_unpretentious にのみ使用されるようになったので、現代の韓国語はスペースを使用するため、「ko」をスキップできるのではないかと思います。韓国語は話せないので、確認が必要かもしれません。

お忙しいところ恐縮ですが、もう一つ、TextSentinel で簡単に改善できると思う点があります。触る勇気がありませんでしたが(私はRuby開発者ではありません)。もしお時間があれば、かなりシンプルで無料のパフォーマンス向上が得られると思います。

私の理解では、これはテキストを単語に分割し、各単語の長さを計算し、すべての長さをスキャンして最大値を見つけ、最後にそれを制限と比較することで、単語が制限よりも長いかどうかを確認しています。

おそらく構文は間違っていますが、意図は伝わると思いますが、テキストを /\\p{Alnum}{#{max_word_length + 1},}/ のようなものに一致させるだけで、これらすべてをスキップできるのではないでしょうか?

Rubyの内部構造を知らないため、これは一致が見つかった時点でチェックを停止する可能性が高く、長すぎる単語がない場合(最も一般的なケース)は、テキストは一度だけスキャンされ、分割、個々の単語の長さチェックなどはスキップされます。

トピックを乗っ取ってしまって申し訳ありませんが、新しいPRはすでにマージされているため、新しいトピックを立てるほどではないかもしれませんが、簡単な勝利のように思えるので、どこに投稿するのが最善かわかりません。ご自由に進めてください。

私も全くわかりません。韓国語話者からの確認をいただけると嬉しいです。

それは素晴らしいアイデアですね :rocket:

やったー! :slight_smile: お時間をいただきありがとうございます。

韓国語翻訳者の方々(@9bow@alexkoala@changukshin :wave:)のどなたか、現代の韓国語はローマ字/ラテン文字と同様に単語間にスペースを使用していることを確認していただけますか?そうすれば、Discourse は韓国語のテキストを処理して長すぎる単語を見つける際にその仮定を使用できますか? :pray: