0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 14
|
|
1 | |
Перевод текстовых числительных в натуральную форму01.08.2019, 19:32. Показов 7411. Ответов 12
Метки python 3.x (Все метки)
Есть задача: На вход подается фраза на русском языке, содержащая числительное. Например, "Я хочу квартиру за 10.5 миллионов" или "Мне нравится когда моя машина, стоимостью сотку штук баксов, мелькает по телевизору". Необходимо выделить числительное в форме натурального числа и вернуть.
Пока что есть только идея создать словарь, где ключами будут словесные представления, а значениями натуральные числа, но учитывая, что могут встречаться жаргоны, разговорные формы и прочее словарь будет слишком большим. Тестовое задание на junior программиста, так что возможно есть решение проще. Пожалуйста, помогите, поделитесь идеями решения.
0
|
01.08.2019, 19:32 | |
Ответы с готовыми решениями:
12
Перевод текстовых полей на сайте Вывести с текстовых полей формы данные в форму текстового документа odt Куда лучше сделать вывод большого количества текстовых данных - форму или HTML? Склонение числительных |
Автоматизируй это!
|
|
01.08.2019, 19:36 | 2 |
di_diana, интересная задача, я верно понимаю, что
"Я хочу квартиру за 10.5 миллионов" = 10 500 000 "Мне нравится когда моя машина, стоимостью сотку штук баксов, мелькает по телевизору" = 100 000
0
|
Am I evil? Yes, I am!
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
|
Автоматизируй это!
|
|
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!
17588 / 10338 / 2824
Регистрация: 21.10.2017
Сообщений: 22,410
|
|
01.08.2019, 19:58 | 7 |
di_diana, как раз ключ - число, а значение - список слов
0
|
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 14
|
|
01.08.2019, 20:01 [ТС] | 9 |
В условии сказано, что число во фразе встречается один или ноль раз, так что думаю не может так быть
0
|
01.08.2019, 20:10 | 11 |
Эта задача из области искусственного интеллекта с самообучением. Вы не можете знать всех возможных вариантов словесного обозначения чисел. Да и никто не может знать. Это программа должна распознавать смысл текста и выявлять слова или словосочетания обозначающие числа и заносить их в словарь для дальнейшего использования.
Видимо те, кто дает это задание не понимают истинного смысла того, что предлагают сделать, и на самом деле подразумевается какое то примитивное задание, которое они не грамотно описали.
0
|
01.08.2019, 20:32 | 12 | |||||
Скорей всего именно так.
Но если чутка возвыситься над примитивом, то можно вспомнить, что в Python есть морфоанализатор pymorphy2. Разбив текст на токены можно выделить из них: 1) числа как литералы (pymorphy2 понимает int и float\real) 2) числа как числительные
Код
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),)) Для этого даже есть специальная библиотека - natasha. Но из ваших примеров она ничего не вытащит, потому что не заточена под такой шаблон.
0
|
Fudthhh
|
02.08.2019, 09:27
Перевод текстовых числительных в натуральную форму
#13
|
Не по теме: Предлагаю зайти на "пацанские паблики" и "читануть" там словечек крепких, связанных с цифрами!
0
|
02.08.2019, 09:27 | |
Изменить окончания числительных Поиск числительных в тексте Определить количество числительных в строке Помогите реализовать склонение числительных Вывод числительных на русском языке. Распознавание числительных, записанных словами Правильные окончания для числительных (C++ or C) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |