Фейл

Jun 22, 2013 13:43

Хотел написать скрипт, чтобы в публикуемых статьях на сайте boychoir.ru автоматически проставлялись тэги по всем именам собственным (сейчас тэги проставляютя вручную, и авторы часто ленятся это делать). Ведь, в принципе, найти имена собственные не так сложно: нужно искать все слова, начинающиеся с прописной буквы и стоящие не после точки. Можно ( Read more... )

boychoir, web, php

Leave a comment

Comments 16

wildcat78 June 23 2013, 21:48:22 UTC
1. http://php.net/manual/ru/ref.mbstring.php не?
у меня работает, если че... по крайней мере для реализации алгоритма из п.2 степень кривизны приемлимая ;)

2. "искать все слова, начинающиеся с прописной буквы и стоящие не после точки" сработает не всегда - например, точно не сработает на предложении "Павел пошел на...", если оно будет не первым в тексте ;)

более надежно будет искать вхождения имен из базы персон, уже упомянутых на сайте.
возможно, "нечетким" поиском - тем самым убирая проблемы со склонениями.

Reply

ptrue June 24 2013, 09:20:35 UTC
1. Спасибо, да, работает. С некоторыми ограничениями. Часть стандартных php-шных строковых функций пришлось всё-таки переписать самому.

2. Да, имена, стоящие в начале фраз, скрипт проигнорирует. Но это встречается довольно редко.

Искать вхождения из базы персон - тоже вариант, но дополнительный. Попробую. Хотя искать нечётким поиском я не умею. Ты знаешь варианты? В любом случае, это именно дополнительный вариант, поскольку часто в статьях упоминаются имена собственные, отсутствующие в базе: левые действующие лица, композитор, географические названия и т. д.

Пока что всё это дело работает вот так: http://boychoir.ru/test/tagsearch/?articleId=437
Соответственно, тэги, которые уже есть в базе, оформлены, как ссылки. Их можно добавлять безоговорочно. С остальными надо что-то делать.

Reply


kivagant June 24 2013, 00:01:28 UTC
php не дружит с юникодом? о.О Что за странное утверждение.
Ну а по-поводу определения имён - мне кажется достаточно выбирать любые слова, которые начинаются с заглавной буквы, т.к. имя может стоять и в начале предложения.
Я бы реализовывал эту задачу в отложенном режиме. Т.е. после написания статьи запускал бы асинхронную обработку, которая по результатам разбора текста отправляла бы автору уведомление: найдены такие-то имена собственные, зайдите отредактируйте если что не так.

Reply

Дружба с юникодом ptrue June 24 2013, 09:13:48 UTC
Ну, кагбэ, половина стандартных функций с юникодными строками не работает. Например, пришлось написать свои аналоги для ctype_upper, ctype_alph и т. д.

Имена в начале предложения встречаются довольно редко. Всё-таки из двух вариантов - удалять каждое начальное слово из строки тэгов или добавить в тэги не найденные начальные имена - админ, скорее, будет больше чертыхаться в первом случае.

Асинхронная обработка - да, идея хорошая, спасибо. Наверное, так и сделаю.

Reply

Re: Дружба с юникодом kivagant June 24 2013, 09:45:53 UTC
Зачем же начальное слово каждый раз в список тегов ложить. Оно туда попасть должно только если найдено совпадение по словарю, с учетом склонений. Другое дело, насколько полным будет этот словарь. Хотя тут вопрос - кого надо теггировать. Судя по сайту, там не требуется в тегах видеть какого-нибудь непонятного персонажа. Состав причастных к хору заранее известен, их ФИО можно во всех склонениях внести в базу и перебор делать по ней, при чем без учета регистра вообще - мало ли как опечатаются.

Reply

Re: Дружба с юникодом ptrue June 24 2013, 09:51:12 UTC
Теггировать желательно всех - не только тех, кто в базе участников.

Кстати, сделал проверку начальных слов в предложениях на наличие в базе тэгов. Это довольно просто, поскольку, как правило, если имя собственное находится в начале предложения, оно стоит в именительном падеже.

Теперь всё работает вот так: http://boychoir.ru/test/tagsearch/?articleId=439

(тэги, имеющиеся в базе, подчёркнуты, как ссылки)

Перебор во всех склонениях, да ещё и в базе иметь, это, по-моему, жестоко по отношению к базе. Можно ведь, наверное, имена из базы просто на лету склонять и сравнивать с кандидатами?

Reply


Leave a comment

Up