如何统计UCREL语义分析系统(USAS)加载的语义标签的出现次数
Posted
技术标签:
【中文标题】如何统计UCREL语义分析系统(USAS)加载的语义标签的出现次数【英文标题】:How to count the occurence of semantic tags loaded by UCREL Semantic Analysis System (USAS) 【发布时间】:2021-09-09 16:00:55 【问题描述】:我为一些歌词加载了 UCREL 语义分析系统 (USAS)。结果示例如下:
因为 Z5/A2.2 那Z8 是A3 好的A5.1 做 A1.1.1 不是Z6 停止 T2- 我 Z8MF 右Z4
每个单词都有一个语义标签。所有这些标签都在http://ucrel.lancs.ac.uk/usas/semtags.txt
我需要计算每个标签的出现次数。所以,我尝试使用 Pandas 进行编码。这没什么大不了的。问题是我需要计算标签直到点(。)之后的第二个数字。例如,“A1.1”、“A1.1.1”或“A1.1.2”必须算作A1.1
我运行的初始代码如下,但它只是计算所有出现的标签,不具备我上面解释的条件。
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')
请问如何添加我需要的条件?
【问题讨论】:
【参考方案1】:让我们尝试使用 str.split
,然后将第一个值保持为 2,然后将 str.join
重新组合在一起:
out = df[1].str.split('.').str[:2].str.join('.').value_counts().reset_index()
或map
:
out = df[1].map(lambda s: '.'.join(s.split('.')[:2])).value_counts().reset_index()
out
:
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
。
使用的样本数据:
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
:
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
步骤分解:
df[1].str.split('.')
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
df[1].str.split('.').str[:2]
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
df[1].str.split('.').str[:2].str.join('.')
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
【讨论】:
以上是关于如何统计UCREL语义分析系统(USAS)加载的语义标签的出现次数的主要内容,如果未能解决你的问题,请参考以下文章