From b6d7726ecbc833abd00f6a9d36b24d9776cfe623 Mon Sep 17 00:00:00 2001
From: Eugen Rochko
Date: Tue, 8 Feb 2022 02:41:17 +0100
Subject: Remove language detection through cld3 (#17478)
* Remove language detection through cld3
* Update app/helpers/languages_helper.rb
Co-authored-by: Yamagishi Kazutoshi
Co-authored-by: Yamagishi Kazutoshi
---
app/lib/activitypub/activity/create.rb | 6 +-
app/lib/language_detector.rb | 101 ---------------------------------
app/lib/link_details_extractor.rb | 9 +--
3 files changed, 2 insertions(+), 114 deletions(-)
delete mode 100644 app/lib/language_detector.rb
(limited to 'app/lib')
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index 33998c477..ea8d146d4 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -112,7 +112,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
url: @status_parser.url || @status_parser.uri,
account: @account,
text: converted_object_type? ? converted_text : (@status_parser.text || ''),
- language: @status_parser.language || detected_language,
+ language: @status_parser.language,
spoiler_text: converted_object_type? ? '' : (@status_parser.spoiler_text || ''),
created_at: @status_parser.created_at,
edited_at: @status_parser.edited_at,
@@ -370,10 +370,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
Formatter.instance.linkify([@status_parser.title.presence, @status_parser.spoiler_text.presence, @status_parser.url || @status_parser.uri].compact.join("\n\n"))
end
- def detected_language
- LanguageDetector.instance.detect(@status_parser.text, @account) if supported_object_type?
- end
-
def unsupported_media_type?(mime_type)
mime_type.present? && !MediaAttachment.supported_mime_types.include?(mime_type)
end
diff --git a/app/lib/language_detector.rb b/app/lib/language_detector.rb
deleted file mode 100644
index 40452eddc..000000000
--- a/app/lib/language_detector.rb
+++ /dev/null
@@ -1,101 +0,0 @@
-# frozen_string_literal: true
-
-class LanguageDetector
- include Singleton
-
- WORDS_THRESHOLD = 4
- RELIABLE_CHARACTERS_RE = /[\p{Hebrew}\p{Arabic}\p{Syriac}\p{Thaana}\p{Nko}\p{Han}\p{Katakana}\p{Hiragana}\p{Hangul}\p{Thai}]+/m
-
- def initialize
- @identifier = CLD3::NNetLanguageIdentifier.new(1, 2048)
- end
-
- def detect(text, account)
- input_text = prepare_text(text)
-
- return if input_text.blank?
-
- detect_language_code(input_text) || default_locale(account)
- end
-
- def language_names
- @language_names = CLD3::TaskContextParams::LANGUAGE_NAMES.map { |name| iso6391(name.to_s).to_sym }.uniq
- end
-
- private
-
- def prepare_text(text)
- simplify_text(text).strip
- end
-
- def unreliable_input?(text)
- !reliable_input?(text)
- end
-
- def reliable_input?(text)
- sufficient_text_length?(text) || language_specific_character_set?(text)
- end
-
- def sufficient_text_length?(text)
- text.split(/\s+/).size >= WORDS_THRESHOLD
- end
-
- def language_specific_character_set?(text)
- words = text.scan(RELIABLE_CHARACTERS_RE)
-
- if words.present?
- words.reduce(0) { |acc, elem| acc + elem.size }.to_f / text.size > 0.3
- else
- false
- end
- end
-
- def detect_language_code(text)
- return if unreliable_input?(text)
-
- result = @identifier.find_language(text)
-
- iso6391(result.language.to_s).to_sym if result&.reliable?
- end
-
- def iso6391(bcp47)
- iso639 = bcp47.split('-').first
-
- # CLD3 returns grandfathered language code for Hebrew
- return 'he' if iso639 == 'iw'
-
- ISO_639.find(iso639).alpha2
- end
-
- def simplify_text(text)
- new_text = remove_html(text)
- new_text.gsub!(FetchLinkCardService::URL_PATTERN, '\1')
- new_text.gsub!(Account::MENTION_RE, '')
- new_text.gsub!(Tag::HASHTAG_RE) { |string| string.gsub(/[#_]/, '#' => '', '_' => ' ').gsub(/[a-z][A-Z]|[a-zA-Z][\d]/) { |s| s.insert(1, ' ') }.downcase }
- new_text.gsub!(/:#{CustomEmoji::SHORTCODE_RE_FRAGMENT}:/, '')
- new_text.gsub!(/\s+/, ' ')
- new_text
- end
-
- def new_scrubber
- scrubber = Rails::Html::PermitScrubber.new
- scrubber.tags = %w(br p)
- scrubber
- end
-
- def scrubber
- @scrubber ||= new_scrubber
- end
-
- def remove_html(text)
- text = Loofah.fragment(text).scrub!(scrubber).to_s
- text.gsub!('
', "\n")
- text.gsub!('
', "\n\n")
- text.gsub!(/(^
|<\/p>$)/, '')
- text
- end
-
- def default_locale(account)
- account.user_locale&.to_sym || I18n.default_locale if account.local?
- end
-end
diff --git a/app/lib/link_details_extractor.rb b/app/lib/link_details_extractor.rb
index d2bcf0c25..fabbd244d 100644
--- a/app/lib/link_details_extractor.rb
+++ b/app/lib/link_details_extractor.rb
@@ -2,6 +2,7 @@
class LinkDetailsExtractor
include ActionView::Helpers::TagHelper
+ include LanguagesHelper
# Some publications wrap their JSON-LD data in their