【问题标题】:nlp python clean text from codenlp python 从代码中清除文本
【发布时间】:2016-08-27 13:29:35
【问题描述】:

我需要从无用的代码或异常中清除大量文本文件,以便进行一些文本分析,例如:

开始文本:7001

  1. 添加工作集
  2. 在该工作集中搜索某些内容
  3. 删除工作集
  4. 通过上下文菜单搜索

==>

日志:2001 年 12 月 17 日星期一 17:23:54 GMT+01:00 4 org.eclipse.ui 0 java.util.ConcurrentModificationException

java.util.ConcurrentModificationException
    at java.util.AbstractList$Itr.checkForComodification(AbstractList.java(Compiled
Code))
    at java.util.AbstractList$Itr.next(AbstractList.java(Compiled Code))
    at

org.eclipse.jdt.internal.ui.search.JavaSearchSubGroup.fill(JavaSearchSubGroup.java:30)
    at org.eclipse.jdt.internal.ui.search.JavaSearchGroup.fill(JavaSearchGroup.java:51)
    at org.eclipse.jdt.internal.ui.actions.ContextMenuGroup.add(ContextMenuGroup.java:25)
    at
org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart.menuAboutToShow(PackageExplorerPart.java:498)
    at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:220)
    at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:253)
    at org.eclipse.jface.action.MenuManager.access$0(MenuManager.java:250)
    at org.eclipse.jface.action.MenuManager$1.menuShown(MenuManager.java:280)

结束文本:7001

或:

开始文本:7019

20011211 使用断点在调试器下运行以下编译单元 表明的。要让 Windows 达到断点,您必须拥有正确的 dl 并运行无障碍客户端。如果您无法使用 更简单的小例子,我可以引导你完成这个步骤。 这个 CU 唯一不同的是它包含一个非公共类 以及公开课。当我在调试器中遇到断点时,我得到了一个 对话框告诉我它找不到非公共课程的来源。这 对话框非常持久 - 我已经告诉它确定和取消,但它不断出现 背部。即使我切换到 Java 透视图,我仍然得到唠叨的对话框 .如果我终止该进程,则对话框不会返回。但重点是 调试器应该能够看到这个类的源代码 - 这是正确的 在我的 Eclipse 工作区中。它甚至没有藏在某个罐子里——它非常 可见的。我怀疑这是非公开课的东西让 源查找。如果有帮助,我会附上对话框。代码如下:

==>

package test;

import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.internal.win32.*;
import org.eclipse.swt.internal.ole.win32.*;
import org.eclipse.swt.ole.win32.*;

public class AccessibilityTest {
    static Display display;
    static Shell shell;
    static FakeWidget fakeWidget;

    public static void main(String[] args) {
        display = new Display();
        shell = new Shell(display);
        shell.setLayout(new GridLayout());
        shell.setText("Accessibility Test");

        fakeWidget = new FakeWidget(shell, SWT.MULTI);
        fakeWidget.setLayoutData(new GridData(GridData.FILL_BOTH));
        shell.setSize(140, 110);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
    }
}



private static GUID IIDFromString(String lpsz) {
    char[] buffer = (lpsz + "\0").toCharArray();
    GUID lpiid = new GUID();
    if (COM.IIDFromString(buffer, lpiid) == COM.S_OK)
        return lpiid;
    return null;
}

结束文本:7019

结果必须是:

开始文本:7001

  1. 添加工作集
  2. 在该工作集中搜索某些内容
  3. 删除工作集
  4. 通过上下文菜单搜索

结束文本:7001

和

开始文本:7019

20011211 使用断点在调试器下运行以下编译单元 表明的。要让 Windows 达到断点,您必须拥有正确的 dl 并运行无障碍客户端。如果您无法使用 更简单的小例子,我可以引导你完成这个步骤。 这个 CU 唯一不同的是它包含一个非公共类 以及公开课。当我在调试器中遇到断点时,我得到了一个 对话框告诉我它找不到非公共课程的来源。这 对话框非常持久 - 我已经告诉它确定和取消,但它不断出现 背部。即使我切换到 Java 透视图,我仍然得到唠叨的对话框 .如果我终止该进程,则对话框不会返回。但重点是 调试器应该能够看到这个类的源代码 - 这是正确的 在我的 Eclipse 工作区中。它甚至没有藏在某个罐子里——它非常 可见的。我怀疑这是非公开课的东西让 源查找。如果有帮助,我会附上对话框。代码如下:

结束文本:7019

在上述情况下,无用的文本位于“==>”代码“

【问题讨论】:

  • 箭头==>真的在文本文件中吗?
  • 不,没有箭头
  • 这是python问题还是java问题?我也不认为它与nltk 有任何关系=)
  • 是否有任何工具可以帮助我通过代码清理这些文本?也不在python中

标签: python regex nlp nltk data-cleaning


【解决方案1】:

这是一个重要的问题,没有预定义的解决方案,因为它取决于您的数据。但是,存在不同的方法将文本(自然语言,NL)与代码分开,但不能保证它们 100% 的工作。

这是我的建议:

首先,您可以检查是否使用了某种将代码与 NL 分开的格式(如GitHubs markdown)并编译适当的正则表达式来检测代码。我使用以下正则表达式来清理从 GitHub 提取的问题:

leading_whitespace_pattern = re.compile(r"^( {4,}|\t( |\t)*).*?$", re.MULTILINE)
backtick_pattern = re.compile(r"```.*?```", re.DOTALL)

这里还有一些从 Redmine 中提取的问题:

code_pattern = re.compile('<pre>.*?</pre>', re.DOTALL)
at_pattern = re.compile(r"@.*?@")

如果这对您不起作用,事情就会变得棘手。您要么必须开发更多匹配数据中可能出现的所有代码行的正则表达式,要么必须使用更高级的方法。巴切利等人。对这个主题做了很多研究,并使用了不同的技术,效果很好。但是,我不确定他们是否发布了他们的实现:

  1. A. Bacchelli、M. D'Ambros 和 M. Lanza,“Extracting Source Code from E-Mails”,第 18 届 IEEE 程序理解国际会议 (ICPC 2010),2010 年,第 24-33 页。
  2. A. Bacchelli、A. Cleve、M. Lanza 和 A. Mocci,“使用 Island Parsing 从自然语言文档中提取结构化数据”,第 26 届 IEEE/ACM 自动化软件工程国际会议 (ASE 2011),2011 年,第 476 页– 479.
  3. N. Bettenburg、B. Adams、AE Hassan 和 M. Smidt,“A Lightweight Approach to Uncover Technical Artifacts in Unstructured Data”,第 19 届 IEEE 程序理解国际会议(ICPC 2011),2011 年,第 185-188 页。李>

祝你好运!

【讨论】:

    【解决方案2】:

    如果您使用 python,您可以通过读取 ==> 和 的索引来删除 ==> 代码 示例:

    str = "Hello, Welcome to ==>python<== programming"
    
    opentag = "==>"
    
    closetag = "<=="
    
    Otag_index = str.find(opentag)
    
    Ctag_index = str.find(closetag)
    
    strToRemove = str[Otag_index+3:Ctag_index]
    
    str = str.replace(strToRemove, '')
    
    print(str)
    

    【讨论】:

    • 谢谢,但很抱歉,文本中没有我想消除的箭头!只是为了显示我要删除的内容...
    • 哦,好的,那你的文件怎么样。您可能需要进行多次检查来清理您的文本文件。你能发布一个示例文件吗?那么我可以提出一些建议
    • 我的文件在“start-text:numberOfReport”和“end-text:numberOfReport”之间。我包括了两个有问题的例子
    • 据我所知,没有任何工具可以满足您的期望。您必须手动删除子字符串,例如从“Log:”开始直到“end-text”(您的第一个文件)。或从“导入”到“结束文本”(您的第二个文件)。像这样你必须考虑所有可能的情况。
    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    相关资源
    最近更新 更多