Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Функция для подсчета количества одинаковых слов на разных языках

first-programmer Знаток (405), на голосовании 3 года назад
Всем привет, как можно посчитать количество одинаковых слов в строке на разных языках? Типа приходит текст, он может быть хоть на русском, хоть на японском, при этом нужно посчитать количество одинаковых слов. Сложность с разными языками где вязь или иероглифы. Например, как считать одинаковые слова в строке на китайском 你好世界,你好世界,你好世界 - Hello world, hello world, hello world. И вообще уместно ли в таких языках говорить про отдельные слова?
Голосование за лучший ответ
Babaduk Просветленный (21048) 3 года назад
думаешь китайци не пользуются компьютером? D)) все тоже самое берешь массив данных проходишь циклом по массиву делаешь нужные записи
first-programmerЗнаток (405) 3 года назад
Во первых иероглифы пишутся слитно без разделения на слова пробелами, но это решаемо через регулярное выражение с специальными кодами. Можно выводить иероглифы отдельно как ключи и считать повторяющиеся иероглифы, но это иероглиф не равно слово - один иероглиф может быть одним словом или несколькими словами. То есть код должен знать что есть слово, а что словосочетание по идее. То есть если два отдельных иероглифа обозначают фразы в которые входит there, то для этого there есть иероглиф отдельный, который обозначает только это слово, и вот этот иероглиф по хорошему и нужно использовать.
Babaduk Просветленный (21048) first-programmer, чего ты так загоныешся ты получил байты вот на уровне ос и оперируй байтами, это скромно сказано
port port Искусственный Интеллект (181562) 3 года назад
Примитивнейшая задача для Пайтона...

s='你好世界, 你好世界, 你好世界 - Hello world, hello world, hello world'

import re
sn=re.sub(r'[^\w\s]','',s.lower()).split()
for i in set(sn): print(i,sn.count(i))

Результат:
hello 3
你好世界 3
world 3
first-programmerЗнаток (405) 3 года назад
Вот это уже не правильно 你好世界 - это фраза на китайском а не слово. При этом даже если бы вы сделали так чтобы выводилось по одному иероглифу, то все равно было бы не совсем верно, так как один иероглиф имеет одно значение, но в сочетании с другим иероглифом другое, плюс один иероглиф моет значить два слова, так в этой фразе 你好世界 - первые два иероглифа 你好 это слово Hello, в отдельности каждый из них это Hi и there. То есть фраза может выглядеть как Hello world или hi there world при переводе, на китайском как она воспринимается вообще известно только тем кто знает язык. Еще иероглиф сам по себе может не значить никакого конкретного слова вроде, а только в составе нескольких иероглифов что-то значить, тогда например код должен понимать, какие иероглифы в сочетании составляют слова.
port port Искусственный Интеллект (181562) first-programmer, Тогда задача становится более сложной - нужно завести словарь всех комбинаций иероглифов и комбинаций их комбинаций, а уж после делать выборку из него. Я показал всего лишь МЕХАНИЗМ выборки... Не очень понимаю, нахрена это нужно?! Узнать, сколько раз употреблялось имя Мао Цзе Дуна во времена "Культурной революции"?!
first-programmerЗнаток (405) 3 года назад
Допустим такое может использоваться в анализаторе текста, для улучшения его читабельности и так далее, типа когда людю пишут повторяя одни и те же слова или да для анализа общей темы рассказа, если составить словарь слов, которые не нужно считать, например предлоги, местоимения. Плюс по хорошему вообще нужно наверно считать одинаковыми слова в разных падежах и склонениях, но это по задаче не обсуждается.
port port Искусственный Интеллект (181562) first-programmer, Ну, так и анализируйте для начала любые языки, кроме китайского и аналогичных ему... Начните с русского! Тут геморроя от одного только слова "замок" - выше крыши... Замок закрыла я на замок Дождик прошел и замок мой замок... (с) Сова (Винни Пух и все, все, все) По утру пошел косой Помахать своей косой... (с) Я (маленький экспромт) Этим вопросом на моей памяти активно занимаются последних 30 лет, поэтому вряд ли удастся придумать что-то радикально новое...
Похожие вопросы