计算单词在文本中出现的次数(不包括某些大写单词)

时间:2019-06-05 12:48:55

标签: mysql sql

我试图使这些词在不同的文章中最常出现,同时排除一些我不感兴趣的词。 但是,我对句子的大小写有疑问,当我排除“ 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 个答案:

答案 0 :(得分:1)

首先将所有内容转换为小写,然后使用REPLACE()函数怎么样?

这会将所有内容转换为小写,然后可以进行替换

编辑

尝试正则表达式SELECT * from table WHERE colmn_name REGEXP '>[^<]*mytext';