首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何统计UCREL语义分析系统加载的语义标签的出现次数

如何统计UCREL语义分析系统加载的语义标签的出现次数
EN

Stack Overflow用户
提问于 2021-06-27 01:39:30
回答 1查看 33关注 0票数 0

我将UCREL语义分析系统(USAS)加载到一些歌词中。下面是一个结果示例:

因为Z5/A2.2 Z8 is A3 Z4 A5.1 do A1.1.1 not Z6 stop T2- me Z8mf right Z4(因为Z5/A2.2表示Z8是正确的)A5.1 do A1.1.1不是stop T2-me Z4

每个单词都有一个语义标签。所有这些标签都在http://ucrel.lancs.ac.uk/usas/semtags.txt

我需要计算每个标签的出现次数。因此,我尝试使用Pandas编写代码。这没什么大不了的。问题是我需要计算标签,直到点(.)之后的第二个数字。例如," A1.1“、"A1.1.1”或"A1.1.2“必须算作A1.1

我运行的初始代码如下,但它只是简单地计算所有标签的出现次数,并且没有我上面解释的条件。

代码语言:javascript
运行
复制
import re
import pandas as pd
import pandas.io.common
from pprint import pprint
import glob

files = glob.glob("/[folder name]/**/*.txt", recursive = True)

files = list(filter(lambda file: os.stat(file).st_size > 0, files))

for file in files:
  data = pd.read_csv(file, engine='python', encoding='utf-8', error_bad_lines=False, header=None, usecols=[1], sep=' ')
  data[1].value_counts().reset_index().to_csv(str(file) +'_totals.txt')

请问我如何添加我需要的条件?

EN

回答 1

Stack Overflow用户

发布于 2021-06-27 01:47:14

让我们尝试使用str.split,然后将第一个值保持为2,然后将str.join重新组合在一起:

代码语言:javascript
运行
复制
out = df[1].str.split('.').str[:2].str.join('.').value_counts().reset_index()

或使用map

代码语言:javascript
运行
复制
out = df[1].map(lambda s: '.'.join(s.split('.')[:2])).value_counts().reset_index()

out

代码语言:javascript
运行
复制
  index  1
0  A1.5  3
1  A1.1  2
2  A1.4  1
3  A1.3  1
4  A1.6  1
5  A1.7  1
6  A1.2  1

*注意,这里不能使用最大分割长度的rsplit,因为这样A1.5就会转换为A1,而不是保持为A1.5

使用的样本数据:

代码语言:javascript
运行
复制
df = pd.DataFrame({1: ['A1.1.1', 'A1.1.2', 'A1.2', 'A1.3', 'A1.4', 'A1.5',
                       'A1.5.1', 'A1.5.2', 'A1.6', 'A1.7']})

df

代码语言:javascript
运行
复制
        1
0  A1.1.1
1  A1.1.2
2    A1.2
3    A1.3
4    A1.4
5    A1.5
6  A1.5.1
7  A1.5.2
8    A1.6
9    A1.7

步骤分解:

代码语言:javascript
运行
复制
df[1].str.split('.')
代码语言:javascript
运行
复制
0    [A1, 1, 1]
1    [A1, 1, 2]
2       [A1, 2]
3       [A1, 3]
4       [A1, 4]
5       [A1, 5]
6    [A1, 5, 1]
7    [A1, 5, 2]
8       [A1, 6]
9       [A1, 7]
Name: 1, dtype: object
代码语言:javascript
运行
复制
df[1].str.split('.').str[:2]
代码语言:javascript
运行
复制
0    [A1, 1]
1    [A1, 1]
2    [A1, 2]
3    [A1, 3]
4    [A1, 4]
5    [A1, 5]
6    [A1, 5]
7    [A1, 5]
8    [A1, 6]
9    [A1, 7]
Name: 1, dtype: object
代码语言:javascript
运行
复制
df[1].str.split('.').str[:2].str.join('.')
代码语言:javascript
运行
复制
0    A1.1
1    A1.1
2    A1.2
3    A1.3
4    A1.4
5    A1.5
6    A1.5
7    A1.5
8    A1.6
9    A1.7
Name: 1, dtype: object
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68144872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档