【问题标题】:How to detect source code in a text?如何检测文本中的源代码?
【发布时间】:2010-07-05 12:28:21
【问题描述】:

是否可以检测文本中的编程语言源代码(主要是 Java 和 C#)?

比如我想知道本文中是否有源代码部分。

.. text text text text text text text text text
text text text text text text text text text
text text text text text text text text text

public static Person createInstance() { return new Person();}

text text text text text text text text text
text text text text text text text text text
text text text text text text text text text ..

我已经搜索了一段时间,但找不到任何东西。

使用 Python 的解决方案会很棒。

问候。

【问题讨论】:

  • 您希望它有多可靠(您希望允许多少误报或误报)?您真的只是想知道是否在您的文本中某处有一些源代码,还是您想从文本的其余部分中找到并描述它?
  • 我不认为有什么神奇的方法,因为代码中插入了“普通文本”,而且几乎不可能 100% 正确。 (但永远不要说永远)。
  • 当然会有误报。这是不可能避免的。是的,我只是想知道我的文本中是否有一些源代码。我不需要找到它。对于我的情况,知道就足够了。
  • 某事引起了我的注意。 stackoverflow.com 使用什么来突出显示语法?它可以正确检测并突出显示我在上面作为示例编写的文本中的部分源代码。
  • 这里的一些答案可能有用:programmers.stackexchange.com/questions/87611/…

标签: python


【解决方案1】:

周围有一些语法荧光笔(pygmentsgoogle-code-prettify),它们已经解决了代码检测和分类问题。研究他们的来源可以给人一种印象。

(现在我再次查看了 pygments - 我不知道它们是否可以自动检测编程语言。但是 google-code-prettify 肯定可以做到)

【讨论】:

  • 我已经检查了 pygments。它只识别完整的源代码文件。
  • @Kerem - 这么想,这就是它的设计目的 - 但也许你可以遍历行(或单词..)并在每次迭代时使用 pygments 函数(iaw - 如果测试每一行它是源代码片段的开始)
  • 代码美化器为什么要检测代码?他们所做的只是输入代码,应用语法并基于一些模板进行标记。他们中的大多数甚至没有尝试检测编程语言
【解决方案2】:

您需要一个具有这些关键字特征(定义、控制结构等)的关键字数据库,以及一个运算符列表,将在整个语言结构中使用的特殊字符(例如 (}, *,||),以及一个正则表达式模式列表。

为了减少迭代,最好的办法是搜索关键字/运算符/字符。使用空间/频率公式,仅从可能为语言的文本开始,基于返回公式的值。然后是确定它是什么语言以及它在哪里结束。

因为许多语言都有相似的代码,这可能很难。以下是哪种语言?

for(i=0;i<10;i++){
   // for loop
} 

如果没有注释,它可能是许多不同类型的语言。有了注释,你至少可以抛弃 Perl,因为它使用 # 作为注释字符,但它仍然可以是 JavaScript、C/C++ 等。

基本上,您将需要执行大量递归查找来识别正确的代码,这意味着如果您想要快速获得某些东西,您将需要一台计算机或计算机集群。此外,每种语言的搜索公式和识别公式都需要完善。

没有适当的库调用或包含的代码识别可能是不可能的,除非列出它可能属于多种语言,您需要一个语法库。

【讨论】:

  • 用#作为注释标签也可以是Python :)
猜你喜欢
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多