xmoonlight
@xmoonlight
https://sitecoder.blogspot.com

Расстановка недостающих пробелов в тексте. Как сделать корректно?

Всем добра!

Отвечал на вопрос Есть,решение,что,бы,пользователи,так,,не,писали? и решил продолжить развитие темы.

Если случайно (или умышленно) слова "cклеены": написаныбезпробела.
Каким образом их можно корректно разделить (с "наименьшей кровью")?

Заранее, всех благодарю за помощь!
  • Вопрос задан
  • 154 просмотра
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Если коротко - никак. У гугла и яндкса явно есть в наличии алгоритмы и библиотеки с таким функционалом, однако отдельно в открытом доступе ничего похожего я не нашел. Если проблема чисто "визуального" свойства(строки не влазят в определенные блоки или ломают верстку), то выхода 2:
- Изменить поведение блоков с текстом через цсс overflow-wrap: break-word;,
- или программно разбивать слова длиннее определенного количества символов на блоки по N символов(причем логичнее делать это при выводе, а не при обработке входящих данных).

UPD: Как вариант - вычленять длинные слова и дергать api гугла или яндекса для проверки "на вшивость".
Ответ написан
xmoonlight
@xmoonlight Автор вопроса, куратор тега PHP
https://sitecoder.blogspot.com
Пока 2 варианта вижу:
1. Простой - разрыв несуществующих цепочек (окружение по 8-10 символов брать и разделять там, где нужно) и часть правил слитно/раздельно ("НЕ"/"НИ" и т.д.) - сделать регулярками.
2. Сложный - НС строить и обучать уже по-полной, включая проверку орфографии и разбор предложения по частям речи (+получение структуры предложения и смысла текста).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
profesor08
@profesor08
Есть словари, скачиваешь их, и пользуешься. Разбиваешь слово по совпадениям. Да, надо делать вручную, но там просто перебор. Чтоб все было быстро, словарь надо перевести в удобную для работы структуру.

Для примера, "написаныбезпробела", проходясь по словарю найдешь совпадение написан, на ы слов нет, присоединяешь к первому совпадению, потом пройдясь еще раз, найдешь слово без, потом найдешь пробел, останется окончание, присоединяешь его. Результат будет "написаны без пробела".
Ответ написан
как вариант решения в лоб, составить массив всех слов (включая все склонения и српяжения), в тексте реплейсить все слова на слова с пробелами (можно с двух сторон), потом просто удалять лишние пробелы, через рег.выраж. например.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы