cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Highlighted
Helper I
Helper I

Contando el número de palabras en una lista que se encuentra en una frase

Hola

Estoy tratando de contar el número de veces que una de las palabras en una lista se encuentra en una frase

Desafortunadamente, el código M que traté de hacer no obtener el resultado correcto

Capture0.PNG

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8jZU0lHKz0tVKCnPB7KKM/JLc1IU0jLzUhSMFDLzFEBS+UVg2VgdoHIjoCJMpYYgpXA1xiA1GUWpqWiqDJRiYwE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, Words = _t, Phrase = _t]),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Words", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Words"),
    #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"ID", type text}, {"Words", type text}, {"Phrase", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Words"}, {{"AllData", each _, type table [ID=text, Words=text, Phrase=text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "WordsList", each [AllData][Words]),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "PhraseAsList", each [AllData][Phrase]),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Counting", each fNwordsInPhrase(#"Added Custom1"[PhraseAsList],#"Added Custom1"[WordsList]))
in
    #"Added Custom2"

donde la función fNwordsInPhrase se define como

= (List1 as list, List2 as list) =>
let
    MyPhrase = List1,
    MyWords = List2,
    MyResult = List.Count(List.Difference(MyPhrase, MyWords))
in
    MyResult

Y lo que obtengo es contar siempre es igual a 3

Capture.PNG

No puedo encontrar mi error en la función o en la lista de operaciones antes de llamar a la función para transformar cadenas en dos listas WordsList y PhraseAsList. Además, tal vez hay una manera más simple de obtener el mismo resultado en DAX

¡Gracias por tu ayuda!

2 REPLIES 2
Highlighted
Super User IV
Super User IV

Re: Contar el número de palabras en una lista que se encuentra en una frase

@stchln ¿Cuánto volumen de datos tiene? Un problema aquí es con la función List.Difference, que siempre le dará el número de filas en esa primera lista, y otro problema es que no ha convertido la frase en una lista.

Esto funcionará, pero podría no ser el más eficiente:

Dejar
Fuente: Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8jZU0lHKKz0tVKCnPB7KKM/JLc1IU0jLzUhSMFDLzFEBS+UVg2VgdoHJoCJMpYYgpXA1xiA1GUWpqWiqDJRiYwE", BinaryEncoding.Base64), Compression.Deflate)), let _t á ((texto de tipo) meta [Serialized.Text ? true]) en la tabla de tipos [ID á _t, Palabras, _t, Frase , _t]),
"Dividir columna por delimitador" á Table.ExpandListColumn(Table.TransformColumns(Source, ?"Words", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType á (escriba texto que acepta valores NULL) meta [Serialized.Text ? true] en el tipo de tipo "itemType"), "Words"), "Words"), "Words"), "Words"), "Words"), "Words"), "Words"),
"Dividir columna por Delimiter1" ? Table.ExpandListColumn(Table.TransformColumns(?"Split Column by Delimiter", "Phrase", Splitter.SplitTextByDelimiter(" ", QuoteStyle.None), let itemType á (escriba texto que acepta valores NULL) meta [Serialized.Text ? true] en el tipo .itemType, "Phrase"), "Phrase"),
"Tipo cambiado" ? Table.TransformColumnTypes("Dividir columna por Delimiter1", "ID", escriba texto, "Palabras", escriba texto, "Frase", escriba texto, escriba texto, escriba texto, escriba texto, escriba texto),
"Columna condicional añadida" - Tabla.AddColumn("Tipo cambiado", "Contiene", cada uno si [Palabras] á [Frase] entonces 1 más 0),
"Filas agrupadas1" á Table.Group("Columna condicional agregada", "ID", "Recuento", cada Lista.Sum([Contiene]), número de tipo, "AllData", cada _, tabla de tipos [ID-texto, Palabras-texto, Frase-texto]-)
En
"Filas agrupadas1"

¿Este post ha resuelto tu problema? Por favor, márquelo como una solución para que otros puedan encontrarlo rápidamente y para que la comunidad sepa que su problema ha sido resuelto.

Si has encontrado este post útil, por favor, dale a Kudos.

Trabajo como instructor y consultor para Microsoft 365, especializado en Power BI y Power Query.

https://sites.google.com/site/allisonkennedycv

 


______________


Has this post solved your problem? Please mark it as a solution so that others can find it quickly and to let the community know your problem has been solved. 


If you found this post helpful, please give Kudos.


I work as a trainer and consultant for Microsoft 365, specialising in Power BI and Power Query. 


excelwithallison.com

Highlighted
Helper I
Helper I

Re: Contar el número de palabras en una lista que se encuentra en una frase

Muchas gracias Allison, ¡qué velocidad!

Helpful resources

Announcements
Meet the 2020 Season 2 Power BI Super Users!

Meet the 2020 Season 2 Power BI Super Users!

Find out who's part of the program this season, and welcome the new Super Users.

August 2020 Community Challenge: Can You Solve These?

August 2020 Community Challenge: Can You Solve These?

We're excited to announce our first cross-community 'Can You Solve These?' challenge!

July 2020 Community Highlights

July 2020 Community Highlights

Learn about the exciting things that happened in July.

Featured Data Story of The Month

Featured Data Story of The Month

All Data Stories Gallery contributions are reviewed for each month. We select a contribution and feature the community member the following month.

Power BI Dev Camp - Developing with .NET Core

Power BI Dev Camp - Developing with .NET Core

Learn how to develop custom web applications for Power BI using .NET Core 3.1 and .NET 5.

Top Solution Authors