如何对照pandas中的标记化列检查列表

2024-09-26 18:18:56 发布

您现在位置:Python中文网/ 问答频道 /正文

一般的想法是写一个脚本,将种子列表中的单词与话语中的单词进行比较。所以我试着

  • [x] 解析xml文件
  • [x] 制作数据帧
  • []将其与存储在变量“hedge”中的一组字进行比较
  • []突出显示与存储在变量中的单词匹配的单词
  • []返回与“name”和“id”匹配的“outrance”
  • [x] 将所有内容写入文件(xml或csv)

xml语料库的结构如下:

<section name="thisisaxml-file">
    <topic>
        <utterance name="John Doe" id="264">
            foo bar?
        </utterance>
        <utterance name="Henry Parker" id="265">
            foo foo bar. New York, wind. 
        </utterance>
    </topic>
</section>

由于我出色的自学python技能,这就是我到目前为止想到的:

import pandas as pd
import xml.etree.ElementTree as ET
import nltk
from nltk.tokenize import word_tokenize

#xml file data input
xml_data = 'sample.xml'

#create an ElementTree object 
etree = ET.parse(xml_data)
doc_df = pd.DataFrame(list(iter_docs(etree.getroot())))

hedge = ['foo', 'wind', 'base']
df = pd.DataFrame({'utterance': doc_df['utterance']})
df['id'] = pd.DataFrame({'id': doc_df['id']})
df['name'] = pd.DataFrame({'name': doc_df['name']})
df['tokenized_sents'] = df.apply(lambda row: word_tokenize(row['utterance']), axis=1)
df['sents_length'] = df.apply(lambda row: len(row['tokenized_sents']), axis=1)

final = df[df.tokenized_sents.apply(lambda x: hedge in x)]
final.to_csv('out.csv', sep='\t', encoding='utf-8') #prints to file

我偶然发现了几个问题:

  1. df['tokenized_sents'].lower()不起作用,因为(我认为)列表格式在pd.DataFrame(list(iter_docs(etree.getroot())))
  2. df[df.tokenized_sents.apply(lambda x: hedge in x)]可以工作,但不会返回任何信息,但是如果您使用的是字符串,它就可以工作
  3. 尝试突出显示找到的单词,失败

所以一般来说,我想对照pandas中的特定列检查单词列表。虽然我在这个网站上看到过类似的话题,但到目前为止,所提到的解决方案都不适合我

你对我有什么想法吗


Tags: nameimportiddataframedfdocfooxml
1条回答
网友
1楼 · 发布于 2024-09-26 18:18:56

变量df已经是一个包含字典的数据帧。在dataframes中创建dataframes会损坏您的数据,或者至少我看到它会损坏我的一些数据。如果不是这样的话,我想知道怎么做。 无论如何,不知道这是否能解决您的问题,但它肯定会清理您的代码

hedge = ['foo', 'wind', 'base']
df = pd.DataFrame({
                 'utterance': doc_df['utterance'],
                  'id':doc_df['id'],
                  'name':doc_df['name']})
df['tokenized_sents'] = df.apply(lambda row:word_tokenize(row['utterance']),axis=1)
df['sents_length'] = df.apply(lambda row: len(row['tokenized_sents']), axis=1)

相关问题 更多 >

    热门问题