在 Python 中切片列表时的奇怪行为

Weird Behavior When Slicing a List in Python

我在 pandas 中有一些数据要用于命名实体识别。数据样本如下

text
['Angie', '’s', 'is', 'my', 'favorite', 'but', 'the', 'prices', 'at', 'little', 'Tonys', 'are', 'better', '.']

tags
['B-ORG', 'I-ORG', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-ORG', 'I-ORG', 'O', 'O', 'O']

我运行sklearn.model_selection import train_test_split上数据

# split data
train_texts, test_texts, train_tags, test_tags = train_test_split(dataset["text"].tolist(),
                                                                dataset["tags"].tolist(),
                                                                test_size=0.20,
                                                                random_state=15)

但是,当我尝试打印列表时,它给了我一些奇怪的行为,具体来说,它计算文本和标签周围的方括号 [] 和引号 '' 作为测试的一部分和标签。例如,当我写

print(train_texts[0][0:9], train_tags[0][0:9], sep='\n')

output
['Angie',
['B-ORG',

我的问题是,为什么将括号和引号字符计为字符串的一部分?我该如何解决?

尝试:

text
Angie ’s is my favorite but the prices at little Tonys are better.

tags
B-ORG I-ORG O O O O O O O B-ORG I-ORG O O O

您似乎在尝试将格式化为看起来像列表的字符串转换为列表。它不知道更好,所以括号和撇号顺其自然。

我已经使用DataFrame进行声明,并执行了拆分train_texts and test_textstrain_tags and test_tags的相同任务。请参考下面的解决方案。然后我们将继续处理您的场景中 []'' 的问题。

# Import all the important libraries
import pandas as pd
from sklearn.model_selection import train_test_split

# Store all String data into the 'data' variable
data = {
'text' : ['Angie', '’s', 'is', 'my', 'favorite', 'but', 'the', 'prices', 'at', 'little', 'Tonys', 'are', 'better', '.'],
'tags' : ['B-ORG', 'I-ORG', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'B-ORG', 'I-ORG', 'O', 'O', 'O']}

# Store above Initialized Data into DataFrame
dataset = pd.DataFrame(data)

注意:- 在继续之前总是打印 dataset 的几条记录。因为有时您的 dataset 可能会出现问题,这可能会偏离您的预期结果。

# Print a few records of 'dataset'
dataset

    text        tags
0   Angie       B-ORG
1   ’s          I-ORG
2   is          O
3   my          O
4   favorite    O
5   but         O
6   the         O
7   prices      O
8   at          O
9   little      B-ORG
10  Tonys       I-ORG
11  are         O
12  better      O
13  .           O

现在我们可以继续拆分部分了。我使用了你问题部分提到的相同方法。

# split data
train_texts, test_texts, train_tags, test_tags = train_test_split(
    dataset["text"].tolist(),
    dataset["tags"].tolist(),
    test_size=0.20,
    random_state=15)

因此,在拆分之后我们可以打印 train_texts and train_tags

的切片列表
print(train_texts[0][0:9], train_tags[0][0:9], sep='\n')
上面单元格的

Output如下:-

favorite
O

如您所见,它没有在输出中打印任何 []''

您的问题:-

Q.) 为什么将括号和引号字符计为字符串的一部分?我该如何解决? A.) 我不知道这个问题背后的正确原因。但如果您的数据未正确声明或由于任何其他声明问题,有时可能会发生这种情况。但是在继续之前打印 dataset 是一个很好的做法。因为您可以通过这种方法识别数据的行为。

解决方案:- DataFrame 的使用非常适合我。你可以用那个。

希望此解决方案对您有所帮助。如果您仍然遇到问题,请上传完整代码。因此,我们可以找到相应的解决方案。