Подсчитайте, сколько раз слова появляются в тексте, исключая некоторые заглавные слова - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь заставить слова появляться чаще всего в разных статьях, исключая некоторые слова, которые меня не интересуют. Однако у меня есть проблема с регистром, когда я исключаю слово «ce», я хочу, чтобы «ce» и «Ce» были исключены, но исключено только «ce».

Table : articles

Id     article

1      <b>Nuit blanche à Lariboisière : les grévistes en arrêt de maladie pour éviter les réquisitions </b><u><br> </u><br/>Paris, le mardi 4 juin 2019 - Les grèves des professionnels de santé ne font généralement pas de bruit. Tout en se déclarant grévistes, les infirmières, médecins, aides-soignants qui souhaitent exprimer leur mécontentement et leurs revendications concernant leurs conditions de travail se contentent généralement de quelques débrayages ponctuels, de grèves administratives et de porter un brassard sur leurs blouses blanches. Cette absence de conséquence directe sur le fonctionnement des services explique que ces mouvements passent souvent inaperçus. Ainsi, même si les colonnes du JIM s’en sont fait régulièrement l’écho ces dernières semaines, les grèves des personnels soignants d’une cinquantaine de services d’urgence français depuis plus d’un mois n’ont guère été relayées. <br/><b>Après une journée de travail, enchaîner la nuit</b><br/>Mais ce matin, la presse nationale ne peut plus ignorer ce phénomène. Hier soir, à l’heure où l’équipe de nuit devait prendre son service aux urgences de l’hôpital Lariboisière, une grande partie des personnels attendus étaient absents. Une vingtaine de personnes selon les syndicats n’ont pas pris leur service. Les réquisitions se sont rapidement révélées impossible : la plupart étaient en effet en arrêt maladie, ce qui empêche le déclenchement de ce type de mesure. Ce sont donc les équipes de jour qui après une première longue période de travail ont dû prendre le relais, multipliant les heures, mettant (peut-être) en péril la sécurité de la prise en charge des patients. <br/><b>Des autorités aux abonnés absents</b><br/>Ce matin, l’information était révélée avec émotion et mettait en lumière d’autres situations périlleuses dans le reste du pays. Ainsi, un interne des urgences de Lons-le-Saunier a raconté au Quotidien du médecin un week-end de l’ascension cauchemardesque, marqué par l’absence de nombreux personnels, médecins comme infirmiers, dont plusieurs en arrêt maladie, alors qu’un mouvement de grève se poursuit dans l’établissement. Bien plus que ses collègues et confrères, le jeune médecin qui est convaincu que les soins délivrés aux patients ont pâti des effectifs réduits et de la fatigue des équipes présentes sur place, blâme les autorités qui n’ont pas su prendre la mesure de la gravité de la situation. L’administration s’est quasiment contenté de s’assurer que les praticiens avaient pu faire face aux urgences, tandis qu’une manifestation sportive potentiellement dangereuse a été maintenue. <br/><b>Que chacun prenne ses responsabilités</b><br/>Pour les syndicats, telle que l’Association des médecins urgentistes de France, si le recours à l’arrêt maladie pour contourner les réquisitions (méthode que l’on avait vu utilisée dans certaines grèves au sein des forces de l’ordre) peut être jugé discutable (il pose notamment la question de la complicité des praticiens prescripteurs de ces arrêts) il témoigne de la souffrance éprouvée par les personnels. « <i>Ce qu’il faut bien comprendre, c’est que la réponse du personnel est liée à l’inconséquence des gens qui nous gouvernent</i> » a ainsi commenté le porte-parole de l’AMUF, le docteur Christophe Prudhomme. Le ministre de la Santé, Agnès Buzyn, interrogée par France Inter a pour sa part estimé que la méthode était un « <i>dévoiement</i> » de « <i>ce qu’est un arrêt maladie. Je pense que ce n’est pas bien car ça entraîne une surcharge de travail pour les autres</i> » a-t-elle observé. Alors que ce jugement sera sans doute critiqué, le ministre a encore tenu à rappeler que les discussions avec les urgentistes avaient été nombreuses et que des sommes importantes avaient déjà été débloquées. Elle a en outre considéré que la crise des urgences était principalement liée à la difficulté pour les Français de pouvoir consulter un médecin en ville (ce qui sera probablement commenté par les représentants des médecins libéraux). Elle a d’ailleurs enjoint les Français à différer le plus possible leurs visites aux urgences. <br/>Mais si la question de la responsabilité des citoyens ne pourra pas être toujours éludée, celle de la fermeture de lits, de la réorganisation de certaines structures et de la vacance de nombreux postes ne le pourra pas plus. <br/><b>Aurélie Haroche </b></p>

Таблица, содержащая слова для исключения:

Table : exception

Id     keyword

1      ce

Я использую этот запрос SQL:

select DISTINCT val, cnt as result from(
    select REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE((substring_index(substring_index(t.article, ' ', n.n), ' ', -1)),',',''),'.',''),'(',''),')',''),'!',''),'?',''),'%',''), '<b>', ' '), '</p>', ' '), '</b>', ' '), '<br/>', ''), '<br>', ''), ',', ' '), '<i>', ' '), '</i>', ' '), '.', ' '), '<u>', ' '), '</u>', ' ') val,count(*) as cnt
        from articles t cross join(

         select a.n + b.n * 10 + c.n * 100 + 1 as n
          from (select 0 as n union all select 1 union all select 2 union all select 3 union all
                select 4 union all select 5 union all select 6 union all
                select 7 union all select 8 union all select 9
               ) a cross join
               (select 0 as n union all select 1 union all select 2 union all select 3 union all
                select 4 union all select 5 union all select 6 union all
                select 7 union all select 8 union all select 9
               ) b cross join
               (select 0 as n union all select 1 union all select 2 union all select 3 union all
                select 4 union all select 5 union all select 6 union all
                select 7 union all select 8 union all select 9
               ) c
        ) n
    where n.n <= 1 + (length(t.article) - length(replace(t.article, ' ', ''))) 
    AND (substring_index(substring_index(t.article, ' ', n.n), ' ', -1)) NOT REGEXP '^[0-9]+$' 
    AND (substring_index(substring_index(t.article, ' ', n.n), ' ', -1)) > ''
    AND REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE((substring_index(substring_index(t.article, ' ', n.n), ' ', -1)),',',''),'.',''),'(',''),')',''),'!',''),'?',''),'%',''), '<b>', ' '), '</p>', ' '), '</b>', ' '), '<br/>', ''), '<br>', ''), ',', ' '), '<i>', ' '), '</i>', ' '), '.', ' '), '<u>', ' '), '</u>', ' ') NOT IN (SELECT keyword FROM exception)
    group by val 
    order by cnt desc
) as x 
ORDER BY `result`  DESC

Я получаю список всех слов с номерами их появления. Слово «ce» исключено, но «Ce» не исключено.

Что я пробовал:

LOWER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE((substring_index(substring_index(t.article, ' ', n.n), ' ', -1)),',',''),'.',''),'(',''),')',''),'!',''),'?',''),'%',''), '<b>', ' '), '</p>', ' '), '</b>', ' '), '<br/>', ''), '<br>', ''), ',', ' '), '<i>', ' '), '</i>', ' '), '.', ' '), '<u>', ' '), '</u>', ' ')) NOT IN (SELECT keyword FROM exception)

Но это не работает ..

Поэтому у меня вопрос: как исключить слово с первой буквой в верхнем регистре, вставив в таблицу исключений слово в нижнем регистре?


РЕДАКТИРОВАТЬ

Я думаю, я нашел проблему:

С

select (substring_index(substring_index(t.articles, ' ', n.n), ' ', -1)) val,count(*) as cnt

Я получаю:

val     result
<i>Ce     2

Как удалить специальные символы, вставленные в слова?

1 Ответ

1 голос
/ 05 июня 2019

Как насчет того, чтобы сначала преобразовать все в нижний регистр, а затем использовать функцию REPLACE ()?

Это преобразовало бы все в нижний регистр, а затем вы могли бы выполнить замену

РЕДАКТИРОВАТЬ

Попробуйте регулярное выражение SELECT * from table WHERE colmn_name REGEXP '>[^<]*mytext';

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...