【问题标题】:How to separate Parts of Speech tags from Sentences and make them into two separate columns one with the raw sentence and one with only the POS tags如何从句子中分离词性标签并将它们分成两个单独的列,一列包含原始句子,另一列仅包含 POS 标签
【发布时间】:2020-04-15 16:16:59
【问题描述】:

所以我有一个孟加拉语词类数据集,如下所示:

রপ্তানি\JJ.n.n দ্রব্য\NC.0.0.n.n -\PU তাজা\JJ.n.n ও\CCD.n শুকনা\JJ.n.n ফল\NC.0.0.n.n ,\PU আফিম\NC.0.0.n.n ,\PU পশুচর্ম\NC.0.0.n.n ও\CCD.n পশম\NC.0.0.n.n এবং\CCD.n কার্পেট\NC.0.0.n.n ৷\PU
রাজা\NP.0.0.n.n মহানন্দ\NP.0.0.n.n রাজধানীতে\NC.0.loc.n.n তৈরি\NC.0.0.n.n করেছিল\VM.3.pst.pft.dcl.fin.n.n.n শিব\NP.0.0.n.n মন্দির\NC.0.0.n.n ও\CCD.n বৈষ্ণবদের\NC.0.gen.n.n মন্দির\NC.0.0.n.n ৷\PU
প্রতিটি\JQ.y.n.nnm বৌদ্ধ\JJ.n.n -\PU সন্ন্যাসী\NC.0.0.n.n ,\PU সন্ন্যাসিনী\NC.0.0.n.n বা\CCD.n গৃহস্থ\NC.0.0.n.n -\PU যেই\PRL.sg.0.n.n.y.n হোক\VM.3.prs.sim.sbj.fin.n.n.n না\CX.y কেন\CX.n ,\PU প্রাতে\NC.0.loc.n.n ,\PU দ্বিপ্রহরে\NC.0.loc.n.n ,\PU অপরাহ্নে\NC.0.loc.n.n ,\PU ও\CCD.n সন্ধ্যায়\NC.0.loc.n.n এই\DAB.0.n পবিত্র\JJ.n.n ত্রয়ীকে\NC.0.acc.n.n প্রণাম\NC.0.0.n.n ও\CCD.n ধ্যান\NC.0.0.n.n করে\VM.0.0.0.0.nfn.n.n.n ,\PU তাকে\PPR.sg.3.acc.n.n.n.n জপ\NC.0.0.n.n করে\VM.0.0.0.0.nfn.n.n.n এই\PPR.sg.3.0.n.n.n.n ব'লে\VM.0.0.0.0.nfn.n.n.n -\PU "\PU আমি\PPR.sg.1.0.n.n.n.n বুদ্ধের\NP.0.gen.n.n শরণাগত\JJ.n.n হলাম\VM.3.pst.sim.dcl.fin.n.n.n ৷\PU
বদাওনী\NP.0.0.n.n যে\CX.n খুব\JQ.n.n.nnm খুশি\JJ.n.n মনে\NC.0.loc.n.n অনুবাদের\NC.0.gen.n.n কাজে\NC.0.loc.n.n আত্মনিয়োগ\NC.0.0.n.n করেছিলেন\VM.3.pst.pft.dcl.fin.n.n.y তা\PPR.sg.3.0.n.n.n.n নয়\VM.3.prs.sim.dcl.fin.n.y.n ,\PU কারণ\CSB.n মহাভারতের\NP.0.gen.n.n ওই\DAB.sg.y অংশের\NC.0.gen.n.n বিষয়বস্তুর\NC.0.gen.n.n সঙ্গে\PP.0.n তাঁর\PPR.sg.3.gen.n.n.n.y গোঁড়া\JJ.n.n ধর্মবিশ্বাসের\NC.0.gen.n.n আদপে\CX.n কোন\JQ.n.n.nnm মিল\NC.0.0.n.n না\CX.y থাকায়\NV.loc.n.n তাঁর\PPR.sg.3.0.n.n.n.y কোনরকম\JQ.n.n.nnm মানসিক\JJ.n.n তৃপ্তি\NC.0.0.n.n হত\VM.3.pst.sim.hab.fin.n.n.n না\CX.y ,\PU সমস্ত\JQ.n.n.nnm পরিশ্রম\NC.0.0.n.n অর্থহীন\JJ.n.n মনে\NC.0.loc.n.n হত\VM.3.pst.sim.hab.fin.n.n.n ৷\PU

我已经使用 Pandas 读取了数据框:

import pandas as pd

df = pd.read_csv('base_dataset.txt', sep='delimiter', encoding ='utf-8', header=None)

df

OUTPUT: 

0   রপ্তানি\JJ.n.n দ্রব্য\NC.0.0.n.n -\PU তাজা\JJ....
1   রাজা\NP.0.0.n.n মহানন্দ\NP.0.0.n.n রাজধানীতে\N...
2   প্রতিটি\JQ.y.n.nnm বৌদ্ধ\JJ.n.n -\PU সন্ন্যাসী...
3   বদাওনী\NP.0.0.n.n যে\CX.n খুব\JQ.n.n.nnm খুশি\...
4   কয়েক\JQ.n.n.nnm বিঘা\CCL.n ধানী\JJ.n.n জমিও\NC...
5   মাটি\NC.0.0.n.n থেকে\PP.0.n বড়জোর\JQ.n.n.nnm চ...
6   তাদের\PPR.pl.3.gen.n.n.n.n চা\NC.0.0.n.n -\PU ...
7   নকল\JJ.n.n ওষুধের\NC.0.gen.n.n কেরামতি\NC.0.0....

你们的问题: 我想将词性标签与句子分开并制作两个不同的列。 第 1 列是孟加拉语句子,第 2 列是相应的 POS 标签,这样我就可以用它来将其输入到双向 LSTM 并进行训练

Here is how the output should look like if I printed the First rows of both Columns:
Column 1 Row 1:
রপ্তানি দ্রব্য - তাজা ও শুকনা ফল, আফিম, পশুচর্ম ও পশম এবং কার্পেট ৷

Column 2 Row 1:
JJ.n.n NC.0.0.n.n PU JJ.n.n CCD.n JJ.n.n NC.0.0.n.n PU NC.0.0.n.n PU NC.0.0.n.n CCD.n NC.0.0.n.n CCD.n NC.0.0.n.n PU

更新: 如果你不能理解孟加拉语,你能告诉我用英语做这件事的程序吗? 例如,考虑一个包含 1000 个英语句子的文件:

People/NNS continue/VBP to/TO inquire/VB the/DT reason/NN for/IN the/DT race/NN for/IN outer/JJ space/NN 

Secretariat/NNP is/VBZ expected/VBN to/TO race/VB tomorrow/NN

我基本上想要的是将原始数据集转换为包含两列的数据集;第 1 列仅包含没有 POS 标签的普通句子,第 2 列包含第 1 列中句子的相应 POS 标签中的标签。

我想对数据集中的所有句子都这样做,我在此处附上了数据集: POS Bangla Data-set

请注意,我想保留标点符号,例如用标记 PU 表示的逗号,因为它在确定句子的结构方面发挥作用。

任何帮助将不胜感激。

【问题讨论】:

  • 您能更具体地说明您正在努力解决的问题吗?请参阅How to Askhelp center
  • @AMC 您好,我无法清理并将句子分成两列。我放在上面框中的那个是手动完成的,只有 1 行。我想要一个可以对所有句子执行此操作的脚本。示例:我输入文件,脚本应生成两个不同的列,其中第 1 列仅包含没有词性标签的孟加拉语句子,第 2 列将仅是相应的词性标签。
  • @AMC 基本上我想要的是将原始数据集转换为包含两列的数据集。第 1 列仅包含孟加拉语句子,第 2 列包含标签,如第 1 列中孟加拉语句子的相应 POS 标签中一样。
  • 不想粗鲁,但我们很难理解。原因是我们无法理解您的数据库中写入的内容以及您希望如何格式化它(它是另一种语言)。所以不知道我们能如何提供帮助:/对不起。
  • @GauravMall 你能给我看一个包含使用相同结构的英语句子的例子吗?例如,想象一下我在下面放的单曲中有一千个英语句子。您如何将标签和句子分成两个不同的列? . . .句子:1)人/NNS继续/VBP到/TO询问/VB/DT原因/NN为/IN/DT种族/NN为/IN外/JJ空间/NN句子2)秘书处/NNP是/VBZ预期/VBN to/TO 比赛/VB 明天/NN

标签: python pandas nlp


【解决方案1】:

以下是一个解决的英文例子。正斜杠替换为反斜杠,以便与提供的孟加拉语文本保持一致。

此代码的示例数据:

People\NNS continue\VBP to\TO inquire\VB the\DT reason\NN for\IN the\DT race\NN for\IN outer\JJ space\NN 

Secretariat\NNP is\VBZ expected\VBN to\TO race\VB tomorrow\NN
import pandas as pd
import re

#import data
df = pd.read_csv('base_dataset.txt', sep='delimiter', encoding ='utf-8', header=None, names=['sentences'], engine='python')

#Build function to extract the POS tags
def extractPos(s):
    line = str(s)
    matches = re.findall(r"(?<=\\).*?(?=\s)",line)
    posTag = " ".join(matches)
    return(posTag)
#Build function to extract the tokens    
def extractToken(s):
    line = str(s)
    matches = re.findall(r"(?<=\s).*?(?=\\)",line)
    words = " ".join(matches)
    return(words)
#Add new columns to the existing dataframe
df['posTag'] = df['sentences'].apply(lambda x: extractPos(str(x)))
df['words'] = df['sentences'].apply(lambda x: extractToken(str(x)))

【讨论】:

  • 处理任何词性相关任务的建议方法是使用 NLTK 库。上面粘贴的解决方案是假设提问者只能访问一个文本文件而不是可重现的代码。
猜你喜欢
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
相关资源
最近更新 更多