【问题标题】:Extract Hashtags and add to new csv field in Powershell提取 Hashtags 并添加到 Powershell 中的新 csv 字段
【发布时间】:2019-11-19 12:42:19
【问题描述】:

每个月,我都会下载一些我负责的工作相关句柄的 Twitter 分析。

我在 powershell 中进行了一些数据按摩(将数字列的 - 更改为空值),以便我的 Excel Power Query 可以轻松处理数据。

我决定将推文文本列中的主题标签复制到他们自己的列中,以便调查它们的表现。

我的整个剧本:

Remove-Item -path .\merged\merged.csv
$InputFiles = Get-Item "*.csv"
$OldString  = '"-"'
$NewString  = '""'
$InputFiles | ForEach {
    (Get-Content -Path $_.FullName).Replace($OldString,$NewString) | Set-Content -Path $_.FullName
}
Get-ChildItem -Filter *.csv | Select-Object -ExpandProperty FullName | Import-Csv | Export-Csv .\merged\merged.csv -NoTypeInformation -Append

由于我意识到我可能需要同时处理多个月,因此我决定每个月简单地重做合并文件。

我正在查看我需要添加什么来提取主题标签,并且我很确定我在正确的轨道上:

Import-Csv .\merged\merged.csv | Select-Object *,@{Name='hashtags';Expression={'XYZZY'}} | Export-Csv file.csv -NoTypeInformation

当然,问题是我不确定我需要在 XYZZY 中添加什么。我知道我的正则表达式是 #[a-zA-Z0-9](在我之前的一些尝试中,我无法让 #\w 捕获除主题标签的第一个字母之外的任何内容。

'Tweet text' 是列名。

推文范围从 0 到 6 个主题标签。我看到的一个问题是,每个正则表达式匹配选项似乎都会返回对象中的项目,我希望在该对象中简单地将它们添加为最终字段中的空格分隔列表。

我可能会遇到的问题: 为什么不在 Excel 中执行此操作? 好问题。我最初想将它添加到电源查询导入中,但实际上似乎不可能。虽然我可以在 VBA 中做到这一点,但我希望这可以作为一种解决方案进行打包。

为什么不在 Python 中这样做呢? 我确实有一个基本完成的解决方案,但我真的很想把它作为一个简单的过程。

什么是标题? "Tweet id","Tweet permalink","Tweet text","time","impressions","engagements","engagement rate","re​​tweets","re​​plies","likes","user profile clicks", “网址点击”、“标签点击”、“详细信息展开”、“固定链接点击”、“应用打开”、“应用安装”、“关注”、“电子邮件推文”、“拨打电话”、“媒体浏览量”、媒体互动”、“提升印象”、“提升互动”、“提升互动率”、“提升转推”、“提升回复”、“提升喜欢”、“提升用户个人资料点击次数”、“提升网址点击次数”、“提升标签点击量”、“推广的详细信息展开”、“推广的永久链接点击”、“推广的应用打开”、“推广的应用安装”、“推广的关注”、“推广的电子邮件推文”、“推广的拨号电话”、“推广的媒体浏览量” “促进媒体参与”

一些示例推文怎么样? 好吧,我的意思是,它们是推文。下面是一些例子:

This is a tweet with zero hashtags.
@somename this is a reply with #one hashtag.
This is a tweet with two #hashtags, one that has #punctuation attached.

【问题讨论】:

  • 你能发一些Tweet Text属性的内容示例吗?
  • 添加了一些虚假推文。真实数据有 0-6 个标签,但常见的是
  • 谢谢...我在演示如何提取主题标签项目中使用了您的示例数据。希望它能满足您的需要... [grin]

标签: regex powershell csv


【解决方案1】:

这样就可以了... [grin]

# fake reading in some text from some source
$InStuff = @'
This is a tweet with zero hashtags.
@somename this is a reply with #one hashtag.
This is a tweet with two #hashtags, one that has #punctuation attached.
'@ -split [System.Environment]::NewLine

$HashTagList = foreach ($IS_Item in $InStuff)
    {
    @($IS_Item.Split(' ')) -match '#'
    }

$HashTagList

输出...

#one
#hashtags,
#punctuation

如果您需要删除标点符号,可以通过一些摆弄来完成。 [咧嘴一笑]

【讨论】:

    【解决方案2】:

    感谢李给我一些想法。

    感觉有点胶带/钢丝绳,但是......

    Remove-Item -path .\merged\merged.csv
    $InputFiles = Get-Item "*.csv"
    $OldString  = '"-"'
    $NewString  = '""'
    $InputFiles | ForEach-Object {
        (Get-Content -Path $_.FullName).Replace($OldString,$NewString) | Set-Content -Path $_.FullName
    }
    Get-ChildItem -Filter *.csv | Select-Object -ExpandProperty FullName | Import-Csv | Export-Csv .\merged\merged.csv -NoTypeInformation -Append
    
    $dataset = Import-Csv ".\merged\merged.csv"
    $dataset | ForEach-Object {
            $HashTagOut = ''
            $HashTagList = $_.'Tweet Text'.Split(' ') -match '#'
            foreach ($Hashtag in $HashTagList)
            {
                if ($Hashtag -match '#[a-zA-Z0-9]*')
                {
                $HashTagOut = $HashTagOut + $Matches[0] + ' '
                }
            }
            $_ | Add-Member -MemberType NoteProperty -Name Hashtags -Value $HashTagOut.Trim() -Force
        }
    
    $dataset | Export-Csv ".\merged\merged.csv"
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2013-05-02
      • 2021-08-07
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2018-08-26
      • 2021-12-05
      • 1970-01-01
      相关资源
      最近更新 更多