Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 14
1

Перевод текстовых числительных в натуральную форму

01.08.2019, 19:32. Показов 7411. Ответов 12

Author24 — интернет-сервис помощи студентам
Есть задача: На вход подается фраза на русском языке, содержащая числительное. Например, "Я хочу квартиру за 10.5 миллионов" или "Мне нравится когда моя машина, стоимостью сотку штук баксов, мелькает по телевизору". Необходимо выделить числительное в форме натурального числа и вернуть.

Пока что есть только идея создать словарь, где ключами будут словесные представления, а значениями натуральные числа, но учитывая, что могут встречаться жаргоны, разговорные формы и прочее словарь будет слишком большим.

Тестовое задание на junior программиста, так что возможно есть решение проще.
Пожалуйста, помогите, поделитесь идеями решения.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2019, 19:32
Ответы с готовыми решениями:

Перевод текстовых полей на сайте
Доброй ночи! Подскажите ктобы как сделал перевод выводимого текста на сайте, если нужно вывести на...

Вывести с текстовых полей формы данные в форму текстового документа odt
Есть форма справки в формате odt (форму справки прилагаю) и форма vb.net с тестовыми полями, в...

Куда лучше сделать вывод большого количества текстовых данных - форму или HTML?
Здраствуйте. Попытаюсь объяснить проблему. Мне нужно показать пользователю много новостей, при...

Склонение числительных
Нужно написать программу, которая считывает натуральное число n, а затем печатает количественное...

12
Автоматизируй это!
Эксперт Python
7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29
01.08.2019, 19:36 2
di_diana, интересная задача, я верно понимаю, что
"Я хочу квартиру за 10.5 миллионов" = 10 500 000
"Мне нравится когда моя машина, стоимостью сотку штук баксов, мелькает по телевизору" = 100 000
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17588 / 10338 / 2824
Регистрация: 21.10.2017
Сообщений: 22,410
01.08.2019, 19:49 3
di_diana, Без словаря никак.

Не по теме:

Денег в кассе почти не было, так что вот вам десять тонн в помощь (с) 'Snatch'

0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 14
01.08.2019, 19:51  [ТС] 4
Welemir1, Насколько я понимаю, да. Я задала этот же вопрос туда, откуда мне прислали задание, но они еще не ответили.
В дополнение к задаче еще: "Фразы любые разговорные. Число во фразе встречается один или ноль раз. Использовать что угодно, любые библиотеки (кроме платных), нельзя пользоваться сторонними сервисами (то есть работать должно локально, без интернет)"
0
Автоматизируй это!
Эксперт Python
7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29
01.08.2019, 19:53 5
di_diana, я бы начал со словаря простых числительных, ну и всякие штуки, мульты, лимоны и прочее жаргонное что вспомнил. Вряд ли очен уж большой будет. Можно же и добавлять
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 14
01.08.2019, 19:56  [ТС] 6
Тогда если словарь, то в каком виде лучше, каждое слово как отдельный ключ, т.е. {'один': 1, 'одно': 1} или ключом сделать кортеж возможных вариантов, т.е. {('один', 'одно'): 1}
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17588 / 10338 / 2824
Регистрация: 21.10.2017
Сообщений: 22,410
01.08.2019, 19:58 7
di_diana, как раз ключ - число, а значение - список слов
0
Автоматизируй это!
Эксперт Python
7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29
01.08.2019, 19:59 8
еще момент, а числительное всегда идет сплошным текстом?
не может быть "он мне дал 300 тысяч и потом, подумав, добавил еще пятьдесят" (300+50=350 000)
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 14
01.08.2019, 20:01  [ТС] 9
В условии сказано, что число во фразе встречается один или ноль раз, так что думаю не может так быть
0
Автоматизируй это!
Эксперт Python
7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29
01.08.2019, 20:06 10
di_diana, гут, пробуй, что получится -выкладывай, может подскажем чего, задача то интересная, помню на джава похожее делал( только без жаргонов, просто пятьдесят=50)
0
1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6
01.08.2019, 20:10 11
Цитата Сообщение от di_diana Посмотреть сообщение
Фразы любые разговорные
Эта задача из области искусственного интеллекта с самообучением. Вы не можете знать всех возможных вариантов словесного обозначения чисел. Да и никто не может знать. Это программа должна распознавать смысл текста и выявлять слова или словосочетания обозначающие числа и заносить их в словарь для дальнейшего использования.
Видимо те, кто дает это задание не понимают истинного смысла того, что предлагают сделать, и на самом деле подразумевается какое то примитивное задание, которое они не грамотно описали.
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
01.08.2019, 20:32 12
Цитата Сообщение от Viktorrus Посмотреть сообщение
и на самом деле подразумевается какое то примитивное задание
Скорей всего именно так.

Но если чутка возвыситься над примитивом, то можно вспомнить, что в Python есть морфоанализатор pymorphy2.
Разбив текст на токены можно выделить из них:
1) числа как литералы (pymorphy2 понимает int и float\real)
2) числа как числительные
Python
1
2
3
4
5
6
7
8
9
10
morph = pymorphy2.MorphAnalyzer(lang='ru')
parse_word = morph.parse('1')
print(parse_word[0])
morph = pymorphy2.MorphAnalyzer(lang='ru')
parse_word = morph.parse('5.5')
print(parse_word[0])
parse_word = morph.parse('десяти')
print(parse_word[0])
parse_word = morph.parse('пяти')
print(parse_word[0])

Код
Parse(word='1', tag=OpencorporaTag('NUMB,intg'), normal_form='1', score=1.0, methods_stack=((NumberAnalyzer(score=0.9), '1'),))
Parse(word='5.5', tag=OpencorporaTag('NUMB,real'), normal_form='5.5', score=1.0, methods_stack=((NumberAnalyzer(score=0.9), '5.5'),))
Parse(word='десяти', tag=OpencorporaTag('NUMR gent'), normal_form='десять', score=0.904761, methods_stack=((DictionaryAnalyzer(), 'десяти', 908, 1),))
Parse(word='пяти', tag=OpencorporaTag('NUMR gent'), normal_form='пять', score=0.844036, methods_stack=((DictionaryAnalyzer(), 'пяти', 908, 1),))
Вообще сама суть задачи примыкает к Named-entity recognition. Но тупо числительные из текста не вытаскивают. Вытаскивают что-то более конкретное. Например, Денежные единицы. Или Даты. Или Адреса. Или Организации. Или Персоналии.
Для этого даже есть специальная библиотека - natasha.
Но из ваших примеров она ничего не вытащит, потому что не заточена под такой шаблон.
0
Fudthhh
02.08.2019, 09:27     Перевод текстовых числительных в натуральную форму
  #13

Не по теме:

Предлагаю зайти на "пацанские паблики" и "читануть" там словечек крепких, связанных с цифрами!

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2019, 09:27

Изменить окончания числительных
Доброе утро! Есть код: ColEl - комбобокс с цифрами от 1 до 50 конструкцией if можно добиться в...

Поиск числительных в тексте
Ребята. Очень нужна помощь. Нужно составить программу на паскале с ассемблерными вставками ( в них...

Определить количество числительных в строке
Люди добрые, помогите пожалуйста. Приму любую помощь. Задача такая: Определить количество...

Помогите реализовать склонение числительных
Склонение числительного.Дано натуральное число N.Записать числительное(либо количественное,либо...

Вывод числительных на русском языке.
Напишите программу, которая читает целое положительное число в десятичном представлении, а на...

Распознавание числительных, записанных словами
речь идет о распознании числительных в буквенном виде, тоесть пример таков (три ->3 , двадцать ->...

Правильные окончания для числительных (C++ or C)
Евгений продолжает набирать опыт в разработке и теперь пишет компьютерную игру в жанре «Квест»,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru