You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI M代码实现按句首大写拆分HTML提取的粘连句子

问题背景
  • 正在对HTML提取的数据集做清洗,当前数据存在句子拆分错误:后一句的句首大写单词直接和前一句的末尾字符粘连,没有正确分隔。
  • 预期拆分效果示例:

    输入粘连文本:The boy plays with the ballThe Girl plays with the Console in a row
    拆分后输出:

    The boy plays with the ball
    The Girl plays with the Console
    
  • 现有基础M代码仅支持Power BI环境运行(调用了Excel版本不支持的Html.Table函数),代码如下:
let
    Source = Table.FromColumns({Lines.FromBinary(Web.Contents("https://echa.europa.eu/registration-dossier/-/registered-dossier/14184/7/1"))}),
    #"Added Custom" = Table.AddColumn(Source, "Custom", each if Text.Contains([Column1], "General Population - Hazard via oral route") then [Column1] else null),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] <> null)),
    #"Kept Last Rows" = Table.LastN(#"Filtered Rows", 1),
    #"Removed Other Columns" = Table.SelectColumns(#"Kept Last Rows",{"Custom"}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Removed Other Columns", {{"Custom", Splitter.SplitTextByDelimiter("</dd><dt>", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Custom"),
    #"Added Custom1" = Table.AddColumn(#"Split Column by Delimiter", "Text", each Html.Table([Custom], {{"Custom",":root"}})),
    #"Expanded Text" = Table.ExpandTableColumn(#"Added Custom1", "Text", {"Custom"}, {"Custom.1"})
in
    #"Expanded Text"
  • 需求:在上述现有M代码的基础上补充处理逻辑,实现按照大小写变化特征拆分粘连句子的效果。
实现方案

核心逻辑是通过正则匹配「非大写的句尾字符(小写字母、句末标点)后直接跟随大写句首字母」的粘连特征,在匹配位置插入临时分隔符后做列表拆分即可,修改后的完整代码如下:

let
    Source = Table.FromColumns({Lines.FromBinary(Web.Contents("https://echa.europa.eu/registration-dossier/-/registered-dossier/14184/7/1"))}),
    #"Added Custom" = Table.AddColumn(Source, "Custom", each if Text.Contains([Column1], "General Population - Hazard via oral route") then [Column1] else null),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] <> null)),
    #"Kept Last Rows" = Table.LastN(#"Filtered Rows", 1),
    #"Removed Other Columns" = Table.SelectColumns(#"Kept Last Rows",{"Custom"}),
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Removed Other Columns", {{"Custom", Splitter.SplitTextByDelimiter("</dd><dt>", QuoteStyle.None), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Custom"),
    #"Added Custom1" = Table.AddColumn(#"Split Column by Delimiter", "Text", each Html.Table([Custom], {{"Custom",":root"}})),
    #"Expanded Text" = Table.ExpandTableColumn(#"Added Custom1", "Text", {"Custom"}, {"Custom.1"}),
    // 新增步骤:识别大小写粘连位置,插入临时分隔符后拆分句子
    #"Added Sentence Split" = Table.AddColumn(#"Expanded Text", "CleanedText", each 
        let
            // 正则匹配小写字母、句末标点后直接接大写字母的粘连位置,插入临时分隔标记
            processed = Text.ReplaceRegex([Custom.1], "([a-z\.\?\!])\s?([A-Z])", "$1#SPLIT_TAG#$2"),
            splitResult = Text.Split(processed, "#SPLIT_TAG#")
        in splitResult
    ),
    #"Expanded Split Result" = Table.ExpandListColumn(#"Added Sentence Split", "CleanedText"),
    #"Removed Blank Lines" = Table.SelectRows(#"Expanded Split Result", each not Text.IsWhitespace([CleanedText]))
in
    #"Removed Blank Lines"

注:Text.ReplaceRegex是Power BI 2022年之后版本内置的正则处理函数,若使用旧版本Power BI,可提前配置正则支持或自定义同名匹配函数即可。如果实际数据中存在数字、右括号等其他字符后直接粘连大写句首的场景,可自行调整正则第一个匹配组的规则,补充需要识别的前导字符即可。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:31:12