【问题标题】:Character count of regular expression in cells in MATLABMATLAB中单元格中正则表达式的字符数
【发布时间】:2013-03-26 20:51:23
【问题描述】:

之前我得到了一些关于如何制作脚本的帮助,该脚本将从推文列表中提取主题标签并将它们放入单元格数组中。 我用这个作为我的代码,在一个 for 循环中

hashtagCell{i} = regexp(textRead{i}, '#[A-z]*', 'match');

这适用于它应该做的事情,但现在我试图找到主题标签的平均字符长度,所以我需要能够添加由上述函数提取的每个主题标签的字符长度和将它们加在一起。但是,当我尝试使用 size() 函数时,它只是给了我单元格的大小而不是字符串的大小,这正是我想要的。我不知道该怎么做。

【问题讨论】:

    标签: regex matlab cell-array


    【解决方案1】:

    对于单个字符串,它会是这样的:

    %# example string with hashtags.
    MyText = 'this is a #text with #hashtag and also #another hashtag';
    
    %# create the hashtagCell.
    hashtagCell = regexp(MyText, '#[A-z]*', 'match');
    
    %# compute the mean.
    AverageLength = mean(cellfun(@(x) size(x,2), hashtagCell));
    

    【讨论】:

    • +1 用于提供适当的regexp。我相当确定我(或者更确切地说,@Andrey)获得平均长度的方法会比你的运行得更快 :-) 查看我提供的链接,以获得有关该主题的有趣阅读。
    • 谢谢!我认为这是有效的。编辑:它实际上对我不起作用。我敢肯定,如果我能把这一切都变成一个字符串。
    • @user1902116 如果它适合您,我们鼓励您通过单击答案左侧的符号来接受答案,这样它的颜色就会变为绿色。
    • 事实证明它对我不起作用,这就是为什么我推迟了。
    • @user1902116 请发布一个简短的示例输入(作为定义它的 MATLAB 命令),因为元胞数组有多种大小和维度。
    【解决方案2】:

    这应该会有所帮助(并且它消除了任何循环,可能除了用于创建 CellOfText 的循环之外):

    %# Example cell array of tweets
    CellOfText = {'Bah #humbug says #Mr scrooge'; 'No #presents for you'};
    
    %# Get all hash tags
    HTC = regexp(CellOfText, '#[A-z]*', 'match');
    
    %# Get the average hash tag length, being careful to unnest HTC
    AvgLength1 = mean(cellfun('length', [HTC{:}]));
    

    免责声明:此方法的灵感来自this excellent answer 的一个类似问题。感谢@Andrey。

    【讨论】:

    • 我知道你在这里做什么,这很有帮助,因为我不熟悉这个功能。但是,我只能让它与一个字符串单元格数组一起使用,就我而言,我需要平均 30 个。我想如果我能把所有这些都放在一根大绳子里,我会很高兴的。
    • @user1902116 我为您准备了一个现在应该可以使用的无循环解决方案。如果没有,请告诉我。诀窍在于[HTC{:}] 行,它基本上取消了单元格的嵌套
    • @user1902116 没有问题,很高兴为您提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多